你的位置:首页 > 操作系统

[操作系统]Android自定义控件6


本文接着实现轮播图广告的监听滚动

本文地址:http://www.cnblogs.com/wuyudong/p/5920757.html,转载请注明源地址。

首先添加布局文件,实现小白点

shape_bg_point_enable.

<??><shape ="http://schemas.android.com/apk/res/android"  android:shape="oval" >  <corners android:radius="5dp" />  <solid android:color="@android:color/white" /></shape>

shape_bg_point_disable.

<??><shape ="http://schemas.android.com/apk/res/android"  android:shape="oval" >  <corners android:radius="5dp" />  <solid android:color="@android:color/darker_gray" /></shape>

再添加一个selector

<??><selector ="http://schemas.android.com/apk/res/android" >  <item android:state_enabled="true" android:drawable="@drawable/shape_bg_point_enable"></item>  <item android:state_enabled="false" android:drawable="@drawable/shape_bg_point_disable"></item></selector>

将selector添加到视图:

    for (int i = 0; i < imageResIds.length; i++) {      imageView = new ImageView(this);      imageView.setBackgroundResource(imageResIds[i]);      imageViewList.add(imageView);      // 加小白点,指示器      pointView = new View(this);      pointView.setBackgroundResource(R.drawable.selector_bg_point);      layoutParams = new LayoutParams(7, 7);      if (i != 0) {        layoutParams.leftMargin = 10;      }      pointView.setEnabled(false);      ll_point_container.addView(pointView, layoutParams);    }

为ViewPager添加滑动监听

public class MainActivity extends Activity implements OnPageChangeListener ......  @Override  public void onPageScrolled(int position, float positionOffset,      int positionOffsetPixels) {    // 滚动时调用  }  @Override  public void onPageSelected(int position) {    // 新条目被选中时调用    position = position % 5;    tv_desc.setText(contentDesc[position]);    // 把之前的禁用,把最新的启用    ll_point_container.getChildAt(lastEnablePoint).setEnabled(false);    ll_point_container.getChildAt(position).setEnabled(true);    lastEnablePoint = position;  }  @Override  public void onPageScrollStateChanged(int state) {    // 滚动状态变化时调用  }

开启页面自动轮询:

    //开启轮询    new Thread() {      public void run() {        while(isRunning) {          try {            Thread.sleep(2000);          } catch (InterruptedException e) {            e.printStackTrace();          }          //往下跳一位          runOnUiThread(new Runnable() {                        @Override            public void run() {              viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);            }          });        }              };                }.start();

完整代码如下:

package com.wuyudong.viewpager;import java.util.ArrayList;import android.R.layout;import android.os.Bundle;import android.app.Activity;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.LinearLayout.LayoutParams;import android.widget.TextView;public class MainActivity extends Activity implements OnPageChangeListener {  private ViewPager viewPager;  private int[] imageResIds;  private ArrayList<ImageView> imageViewList;  private ArrayList<View> pointViews;  private LinearLayout ll_point_container;  private String[] contentDesc;  private TextView tv_desc;  private int lastEnablePoint = 0;  private boolean isRunning = true;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    // 初始化布局 View 视图    initViews();    // Model 数据    initData();    // Controller 控制器    initAdapter();        //开启轮询    new Thread() {      public void run() {        while(isRunning) {          try {            Thread.sleep(2000);          } catch (InterruptedException e) {            e.printStackTrace();          }          //往下跳一位          runOnUiThread(new Runnable() {                        @Override            public void run() {              viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);            }          });        }              };                }.start();  }    @Override  protected void onDestroy() {    super.onDestroy();    isRunning = false;  }  private void initViews() {    viewPager = (ViewPager) findViewById(R.id.viewpager);    viewPager.setOnPageChangeListener(this);// 设置滚动更新    tv_desc = (TextView) findViewById(R.id.tv_desc);    ll_point_container = (LinearLayout) findViewById(R.id.ll_point_container);  }  private void initAdapter() {    ll_point_container.getChildAt(0).setEnabled(true);    tv_desc.setText(contentDesc[0]);    // 设置适配器    viewPager.setAdapter(new MyAdapter());        //默认设置到中间的某个位置    int pos = Integer.MAX_VALUE / 2;    //viewPager.setCurrentItem(pos - 3);    viewPager.setCurrentItem(5000000);  }  private void initData() {    // 初始化要显示的数据    // 图片资源id数组    imageResIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c,        R.drawable.d, R.drawable.e };    // 文本描述    contentDesc = new String[] { "巩俐不低俗,我就不能低俗", "朴树又回来啦!再唱经典老歌引万人大合唱",        "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };    imageViewList = new ArrayList<ImageView>();    pointViews = new ArrayList<View>();    ImageView imageView;    View pointView;    LayoutParams layoutParams;    for (int i = 0; i < imageResIds.length; i++) {      imageView = new ImageView(this);      imageView.setBackgroundResource(imageResIds[i]);      imageViewList.add(imageView);      // 加小白点,指示器      pointView = new View(this);      pointView.setBackgroundResource(R.drawable.selector_bg_point);      layoutParams = new LayoutParams(7, 7);      if (i != 0) {        layoutParams.leftMargin = 10;      }      pointView.setEnabled(false);      ll_point_container.addView(pointView, layoutParams);    }  }  class MyAdapter extends PagerAdapter {    @Override    public int getCount() {      return Integer.MAX_VALUE;    }    // 3、指定复用的判断逻辑    @Override    public boolean isViewFromObject(View view, Object object) {      // 当滑到新的条目,又返回来,view是否可以被复用      return view == object;    }    // 1、返回要显示的条目内容,创建条目    @Override    public Object instantiateItem(ViewGroup container, int position) {      // container:容器:ViewPager      // position:当前要显示的条目的位置      position = position % 5;      ImageView imageView = imageViewList.get(position);      System.out.println("instantItem创建:" + position);      // a、把view对象添加到container中      container.addView(imageView);      // b、把view对象返回给框架,适配器      return imageView; // 必须要重写,否则抛异常    }    // 2、销毁条目    @Override    public void destroyItem(ViewGroup container, int position, Object object) {      // object 要销毁的对象      System.out.println("destroyItem销毁:" + position);      container.removeView((View) object);    }  }  @Override  public void onPageScrolled(int position, float positionOffset,      int positionOffsetPixels) {    // 滚动时调用  }  @Override  public void onPageSelected(int position) {    // 新条目被选中时调用    position = position % 5;    tv_desc.setText(contentDesc[position]);    // 把之前的禁用,把最新的启用    ll_point_container.getChildAt(lastEnablePoint).setEnabled(false);    ll_point_container.getChildAt(position).setEnabled(true);    lastEnablePoint = position;  }  @Override  public void onPageScrollStateChanged(int state) {    // 滚动状态变化时调用  }}

 




日本旅游路线报价费用日本旅游哪里好玩呢日本旅游签证怎么办理日本旅游去哪好日本旅游团报价优惠2015春节广东跨年演唱会去哪看?广东跨年狂欢夜哪里最热闹? 2015广东卫视跨年狂欢夜在哪举行?广东卫视跨年狂欢夜演出有哪些? 2015冬天岭南印象园有什么好玩的?1月广州岭南印象园有什么活动? 深圳东部华侨城冬天去玩什么?东部华侨城冬天有什么好玩的? 肇庆紫云谷门票预订?肇庆砚坑紫云谷电话? 清新金龙洞旅游攻略?清远清新金龙洞怎么去? 清远金龙洞票价?清远六甲金龙洞门票多少钱? 金龙洞地下河地址?清远金龙洞地下河在什么地方? 台山北峰山漂流地图?北峰山勇士漂多少公里? 台山北峰山勇士漂流刺激吗?北峰山勇士漂流多长时间? 北峰山漂流多少钱一次?台山北峰山漂流几点开漂? 北峰山漂流电话?江门北峰山漂流开漂时间? 中国出境旅游世界第一 华山论剑_金庸笔下的华山_带着金庸小说去旅游 玛雅人遗址_北美墨西哥玛雅文明旅游景点_2012玛雅文化遗址末日之旅 那些年我们一起追的女孩拍摄地_那些年外景地_台湾电影之旅 MA08-0803Q7RC Datasheet MA08-0803Q7RC Datasheet MA08-0803QEC Datasheet MA08-0803QEC Datasheet MA08-0803QGC Datasheet MA08-0803QGC Datasheet 姐妹节 姐妹节 姐妹节 桫椤湖 桫椤湖 桫椤湖 雍和宫地址 雍和宫地址 雍和宫地址