广告轮播,其实就是继承自适配器,我用的一个线程来工作图片不停的进行播放,用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();
}
}
}
下面是两个布局,用到图片的时候,用开发工具自带的图片就行
下面的布局是存放广播图片的,上面的布局是存放滑动小圆点的
下面是小圆点文件,一个选中,一个未选中