标点指示器使用动态添加的方式,
viewpager的适配器为PagerAdapter,需要实现 getcount(),
public Object instantiateItem(ViewGroup container, int position)
public boolean isViewFromObject(View view, Object object)
public void destroyItem(ViewGroup container, int position, Object object)这四个方法, 具体注释在代码中写的够详细了
public class MainActivity extends AppCompatActivity { private ViewPager vp_test; private TextView tv_title; private LinearLayout ll_point_group; private int prePosition = 0; //ListView //在布局文件中定义listview,在代码中实例化,准备数据,设置适配器-item布局-绑定数据 // private ArrayList<ImageView> imageViews = new ArrayList(); private int[] imageId = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e, }; private final String[] imageTitle = { "野马释放野性", "野马2号", "野马3号", "野马4号", "野马5号" }; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int item = vp_test.getCurrentItem()+1; vp_test.setCurrentItem(item); // 延迟发消息 handler.sendEmptyMessageDelayed(0,4000); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_viewpage); vp_test = (ViewPager) findViewById(R.id.vp_test); tv_title = (TextView) findViewById(R.id.tv_title); ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group); //Viewpager //在布局文件中定义Viewpager,在代码中实例化,准备数据,设置适配器paegerAdapter()-item布局-绑定数据 // imageViews = new ArrayList<>(); for (int i = 0; i < imageId.length; i++) { ImageView imageView = new ImageView(this); imageView.setBackgroundResource(imageId[i]); imageViews.add(imageView); //添加点 ImageView point = new ImageView(this); point.setBackgroundResource(R.drawable.point_select); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8); if (i == 0) { point.setEnabled(true); } else { point.setEnabled(false); params.leftMargin = 8; } point.setLayoutParams(params); ll_point_group.addView(point); } vp_test.setAdapter(new MyPagerAdapter()); vp_test.addOnPageChangeListener(new MyOnPageChangeListener()); int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % imageViews.size(); vp_test.setCurrentItem(item); handler.sendEmptyMessageDelayed(0,3000); } class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { /** * 当页面滚动的时候回调这个方法 * * @param position 当前页面的位置 * @param positionOffset 滑动页面的百分比 * @param positionOffsetPixels 在屏幕上滑动的像素 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } /** * 当某个页面被选中的时候回调 * * @param position 被选中页面的位置 */ @Override public void onPageSelected(int position) { //把上一个设置成灰色 这个设置成红色 int realPosition = position % imageViews.size(); tv_title.setText(imageTitle[realPosition]); ll_point_group.getChildAt(prePosition ).setEnabled(false); ll_point_group.getChildAt(realPosition ).setEnabled(true); prePosition = realPosition; } /** * 当页面滚动状态变化的时候回调这个方法 禁止->滚动 滚动->禁止 * * @param state */ @Override public void onPageScrollStateChanged(int state) { } } class MyPagerAdapter extends PagerAdapter { /** * 得到图片总数 * * @return */ @Override public int getCount() { return Integer.MAX_VALUE; } /** * 相当于getview * * @param container Virepager自身 * @param position 当前实例化页面的位置 * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { int realPosition = position % imageViews.size(); ImageView imageView = imageViews.get(realPosition); container.addView(imageView); imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: handler.removeCallbacksAndMessages(null); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: handler.sendEmptyMessageDelayed(0,4000); break; } return false; } }); return imageView; } /** * 比较View和object是否同一个实例 * * @param view * @param object instantiateItem()方法返回的结果 * @return */ @Override public boolean isViewFromObject(View view, Object object) { // if(view == object){ // return true; // }else { // return false; // } return view == object; } /** * 释放资源 * * @param container viewpager * @param position 要释放的位置 * @param object 要释放的页面 */ @Override public void destroyItem(ViewGroup container, int position, Object object) { // super.destroyItem(container, position, object); container.removeView((View) object); } } }