您的位置:首页 > 其它

viewpager实现自动滑动以及手势滑动功能

2015-11-08 21:36 288 查看
今天在做项目的时候,有一个viewpgaer展示图片的页面,第一反应是去网上查找,后来看了好多文章,其实也就是那么两三篇文章,其他的都是转载来转载去的,主要就是运用线程来进行无限循环进行实现的操作,个人感觉并不需要运用到线程,尤其是你写了死循环后,线程的回收就是个问题,所以就寻思着自己实现功能好了。

先看效果图吧:



实现思路:

在项目里比较重要的两个东西,一个是handler的使用,一个是监听viewpager的触摸事件,具体的思路是设定一个bool值来监听是否触摸viewpager,我们都知道你如果手动滑动,肯定是要触摸的,我们在触摸的时候把isTouch设定为true,这时候我们手动的把handler里面的消息全部清除掉,当action_up的时候,我们在重新向handler里面发送信息,在handler中进行自动滑动的操作,自动滑动的时间间隔是3秒,最后代码如下:

hanlder类

handler=new Handler(){
@Override
public void handleMessage(Message msg) {
//自动循环
if (!isTouch)
{
int item=msg.what;
if (item==2)
{

viewPager.setCurrentItem(item);
item=0;
handler.sendEmptyMessageDelayed(item, 3000);
}else
{
viewPager.setCurrentItem(item);
item++;
handler.sendEmptyMessageDelayed(item, 3000);
}

}
}
};
//发送第一个自动更换的信息
handler.sendEmptyMessageDelayed(1, 3000);


viewpager的触摸事件

viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:

//这里的操作很重要
//从消息队列中移除所有message
handler.removeMessages(1);
handler.removeMessages(2);
handler.removeMessages(0);
isTouch = true;
break;
case MotionEvent.ACTION_UP:
isTouch = false;
//重新发送
handler.sendEmptyMessageDelayed(viewPager.getCurrentItem(), 3000);
break;
}
return false;
}
});


//初始化viewpager
private void initViewPager(final View view) {

viewPager = (ViewPager) view.findViewById(R.id.viewpager);
mainPagerAdapter = new MainPagerAdapter(imageList);
viewPager.setAdapter(mainPagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
dotsView.get(position).setBackgroundResource(R.drawable.blue_circle);
dotsView.get(oldposition).setBackgroundResource(R.drawable.white_circle);
oldposition = position;
currentPostion = position;

}

@Override
public void onPageScrollStateChanged(int state) {

}
});


全部代码:

//初始化viewpager
private void initViewPager(final View view) {

viewPager = (ViewPager) view.findViewById(R.id.viewpager);
mainPagerAdapter = new MainPagerAdapter(imageList);
viewPager.setAdapter(mainPagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
dotsView.get(position).setBackgroundResource(R.drawable.blue_circle);
dotsView.get(oldposition).setBackgroundResource(R.drawable.white_circle);
oldposition = position;
currentPostion = position;

}

@Override
public void onPageScrollStateChanged(int state) {

}
});
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
//从消息队列中移除所有message
handler.removeMessages(1);
handler.removeMessages(2);
handler.removeMessages(0);
isTouch = true;
break;
case MotionEvent.ACTION_UP:
isTouch = false;
//重新发送
handler.sendEmptyMessageDelayed(currentPostion, 3000);
break;
}
return false;
}
});
MainActivity.menu.addIgnoredView(viewPager);
handler=new Handler(){ @Override public void handleMessage(Message msg) { //自动循环 if (!isTouch) { int item=msg.what; if (item==2) { viewPager.setCurrentItem(item); item=0; handler.sendEmptyMessageDelayed(item, 3000); }else { viewPager.setCurrentItem(item); item++; handler.sendEmptyMessageDelayed(item, 3000); } } } }; //发送第一个自动更换的信息 handler.sendEmptyMessageDelayed(1, 3000);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: