Android中ViewPager实现图片的定时轮播效果(设置Integer.MAX_VALUE)

package com.example.cuboo.mlcircles.view;

import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.example.cuboo.mlcircles.R;

import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

public class Images_home_ad implements ViewPager.OnPageChangeListener {
    private ViewPager viewPager;
    private ImageView[] imgs;
    private ArrayList<View> arrayList;
    private PagerAdapter adapter;
    private int[] setmImgID;
    private int[] ids;
    private int round = 0;
    private static final int START_VIEW = 0x000;
    private static final int STOP_VIEW = 0x001;
    private static final int UPDATE_VIEW = 0x002;
    private static final int RECORD_VIEW = 0x003;
    public Images_home_ad(View view) {
        arrayList = new ArrayList<View>();
        init_data(view);
        //获得id
        viewPager = (ViewPager) view.findViewById(R.id.ll_images_home).findViewById(R.id.images_home_viewpager);
        //实现pageradapter匿名类
        adapter = new PagerAdapter() {
            @Override
            public int getCount() {
                ///return arrayList.size();
                //向左右滑动
                return Integer.MAX_VALUE;
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
//                container.addView(arrayList.get(position));
//                return arrayList.get(position);
                // 因为实际只有几个页面但是我们要无限循环,所以取模计算出当前的是第几个页面
                int i = position % arrayList.size();
                //向左右滑动
                container.addView(arrayList.get(i));
                return arrayList.get(i);

            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
//                container.removeView(arrayList.get(position));
                //向左右滑动
                ((ViewPager)container).removeView(arrayList.get(position % arrayList.size()));
            }
        };
        viewPager.setAdapter(adapter);
        //设置viewpager监听以改变原点颜色
        viewPager.addOnPageChangeListener(this);
        Init_imgs(view);
        /*
         *第一次执行发送消息使得图片轮播
         */
        mHandler.sendEmptyMessage(START_VIEW);
    }
    /*
     *周期性执行轮播图片
     */
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case START_VIEW:
                    mHandler.sendEmptyMessageDelayed(UPDATE_VIEW,5000);
                    break;
                case STOP_VIEW:
                    mHandler.removeMessages(UPDATE_VIEW);
                    break;
                case UPDATE_VIEW:
                    round++; //必须先加1 到下一位置
                    viewPager.setCurrentItem(round);
                    break;
                case RECORD_VIEW:
                    round = msg.arg1;
                    break;
                default:
                    break;
            }
        }
    };


    private void Init_imgs(View view){
        imgs = new ImageView[arrayList.size()];
        for (int i = 0; i < arrayList.size();i++){
            imgs[i] = (ImageView)  view.findViewById(R.id.ll_images_home).findViewById(ids[i]);
        }
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        //发送消息
        mHandler.sendMessage(Message.obtain(mHandler,RECORD_VIEW,position,0));
        //改变远点的颜色position % arrayList.size() 循环滑动改变点的颜色
        for (int i = 0;i < arrayList.size();i++){
            if (position % arrayList.size() == i){
                imgs[i].setImageResource(R.drawable.point_selected);
            }else {
                imgs[i].setImageResource(R.drawable.point);
            }
        }
    }
    /*
     *根据状态执行发送消息
     */
    @Override
    public void onPageScrollStateChanged(int state) {
        switch (state){
            //用户滑动时停止轮播
            case ViewPager.SCROLL_STATE_DRAGGING:
                mHandler.sendEmptyMessage(STOP_VIEW);
                break;
            //用户滑动完成时继续轮播
            case ViewPager.SCROLL_STATE_IDLE:
                mHandler.sendEmptyMessage(START_VIEW);
                break;
        }
    }
    //初始化数据
    private void init_data(View view){
        //获取资源id
        ids = new int[]{R.id.images_home_point01,R.id.images_home_point02,
                R.id.images_home_point03,R.id.images_home_point04
                ,R.id.images_home_point05,R.id.images_home_point06};
        setmImgID = new int[]{R.raw.ad_images01,R.raw.ad_images02,R.raw.ad_images03,
                R.raw.ad_images04,R.raw.ad_images05,R.raw.ad_images06,};

        arrayList.add(getView(view,R.layout.images_ad01,setmImgID[0]));
        arrayList.add(getView(view,R.layout.images_ad01,setmImgID[1]));
        arrayList.add(getView(view,R.layout.images_ad01,setmImgID[2]));
        arrayList.add(getView(view,R.layout.images_ad01,setmImgID[3]));
        arrayList.add(getView(view,R.layout.images_ad01,setmImgID[4]));
        arrayList.add(getView(view,R.layout.images_ad01,setmImgID[5]));
}
    //获得加载到ViewPger中的页面和设置图片
    public View getView(View view,int layoutID,int imgID){
        view = View.inflate(view.getContext(),layoutID,null);
        ImageView view1 = (ImageView) view.findViewById(R.id.images_ads01);
        view1.setBackgroundResource(imgID);
        return view;
    }
}


xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="142dp"
android:orientation="horizontal">
<ImageView
    android:id="@+id/images_ads01"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginRight="4dp"
    android:layout_marginLeft="4dp"
    android:layout_marginTop="4dp"/>
</LinearLayout>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值