ViewPager实现自动播放相册,并且在下方给出圆圈指示器

标点指示器使用动态添加的方式,

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);
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值