Android Viewpager广告轮播,带滑动小圆点,继承自PagerAdapter,原生代码,有助于你对广告轮播的理解

广告轮播,其实就是继承自适配器,我用的一个线程来工作图片不停的进行播放,用Boolean布尔值判断手指按下的时候,对于图片播放的控制,用适配器里面的destroyItem删除和增加instantiateItem来对图片进行调整,防止出现空白页

MainActivity类,逻辑都在里面写了,没用mvp模式,毕竟这样的一个小代码,用mvc实现很便捷的

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
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.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private ViewPager mVp;
	private int [] arr={R.drawable.introduce_01,R.drawable.introduce_02,R.drawable.introduce_03,R.drawable.introduce_04};
	private ImageView mImg1,mImg2,mImg3,mImg4,img;
	private List list=new ArrayList();//存放图片的数据源

	private boolean TouchFlag=false;//触摸锁
	private boolean isFlag=true;//关闭广告轮播的标志
	private int index=0;//当前页面索引值

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initlist();
		initView();
		startTime();//开启定时器
	}
	//找ID的方法
	private void initView() {
		mVp=(ViewPager) findViewById(R.id.mVp);
		mImg1=(ImageView) findViewById(R.id.mImg1);
		mImg2=(ImageView) findViewById(R.id.mImg2);
		mImg3=(ImageView) findViewById(R.id.mImg3);
		mImg4=(ImageView) findViewById(R.id.mImg4);
		//viewpager的滑动监听  页面变化监听
		mVp.setOnPageChangeListener(new OnPageChangeListener() {
			// 正在显示的方法
			//arg0:正在显示的页面的索引
			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub
				index=arg0;
				Log.e("", "当前显示的图片索引:"+arg0);
				clearBottmo();
				switch (arg0) {
				case 0:
					mImg1.setImageResource(R.drawable.vote_n_can_y);
					break;

				case 1:
					mImg2.setImageResource(R.drawable.vote_n_can_y);
					break;
				case 2:
					mImg3.setImageResource(R.drawable.vote_n_can_y);
					break;
				case 3:
					mImg4.setImageResource(R.drawable.vote_n_can_y);
					break;
				}

			}
			//viewpager的滑动的监听的方法  从左到右
			//1。arg0:当前的view的索引
			//2.arg1:偏移量(偏移百分比):0-0.9999999
			//3.arg2: 偏移像素
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				Log.e("", "当前索引:"+arg0);
				Log.e("", "当前偏移量:"+arg1);
				Log.e("", "当前偏移像素:"+arg2);
			}
			// 监听状态改变的方法   arg0:状态值 1:滑动   2:沉降   0:停止
			@Override
			public void onPageScrollStateChanged(int arg0) {
				//滑动
				Log.e("", "11111111"+ViewPager.SCROLL_STATE_DRAGGING);
				//停止
				Log.e("", "000000000"+ViewPager.SCROLL_STATE_IDLE);
				//沉降
				Log.e("", "22222222"+ViewPager.SCROLL_STATE_SETTLING);
				if(arg0==ViewPager.SCROLL_STATE_IDLE){
					TouchFlag=false;
				}else{
					TouchFlag=true;
				}
			}

		});
		ViewPagerScroller scroller=new ViewPagerScroller(this);
		scroller.initViewPagerScroll(mVp);
		mVp.setAdapter(new MyAdapter());
	}
	private Handler hand=new Handler(){
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if(msg.what==0){
				//人为滑动的时候轮播停止
				if(TouchFlag)
					return;
				if(!isFlag)
					return;
				index++;
				if(index>=list.size())
					index=0;
				mVp.setCurrentItem(index);
			}
		}
	};
	//初始化数据源的方法
	private void initlist(){
		for(int i=0;i

下面的一个工具类可有可无,是一个时间控制的工具类,我也分享给大家
ViewPagerScroller

import java.lang.reflect.Field;

import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.animation.Interpolator;
import android.widget.Scroller;

public  class ViewPagerScroller extends Scroller{
	
	 private int mScrollDuration = 0;             // 滑动速度
	  
	    /**
	     * 设置速度速度
	     * @param duration
	     */
	    public void setScrollDuration(int duration){
	        this.mScrollDuration = duration;
	    }
	      
	    public ViewPagerScroller(Context context) {
	        super(context);
	    }
	  
	    public ViewPagerScroller(Context context, Interpolator interpolator) {
	        super(context, interpolator);
	    }
	  
	    @SuppressLint("NewApi")
		public ViewPagerScroller(Context context, Interpolator interpolator, boolean flywheel) {
	        super(context, interpolator, flywheel);
	    }
	  
	    @Override
	    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
	        super.startScroll(startX, startY, dx, dy, mScrollDuration);
	    }
	  
	    @Override
	    public void startScroll(int startX, int startY, int dx, int dy) {
	        super.startScroll(startX, startY, dx, dy, mScrollDuration);
	    }
	  
	      
	      
	    public void initViewPagerScroll(ViewPager viewPager) {
	        try {
	            Field mScroller = ViewPager.class.getDeclaredField("mScroller");
	            mScroller.setAccessible(true);
	            mScroller.set(viewPager, this);
	        } catch(Exception e) {
	            e.printStackTrace();
	        }
	    }
}

下面是两个布局,用到图片的时候,用开发工具自带的图片就行


	
	
	    
	     
	      
	       
	       
	

下面的布局是存放广播图片的,上面的布局是存放滑动小圆点的



    


下面是小圆点文件,一个选中,一个未选中
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(Android)