viewpager自动循环滑动和手动滑动(手动滑动后自动滑动延后处理)
来源:互联网 发布:淘宝怎么看别人的销量 编辑:程序博客网 时间:2024/06/11 06:17
public class RollViewPager extends ViewPager {
private int currentItem;
private final int ROLL_DURATION = 3000;
private boolean mIsChanged = false;
private ArrayList<ImageView> dots;// 点的位置不固定,所以需要让调用者传入
private ViewPagerTask viewPagerTask;
private RollViewPagerAdapter adapter;
public RollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
if (viewPagerTask == null)
viewPagerTask = new ViewPagerTask();
}
public RollViewPager(Context context) {
super(context);
if (viewPagerTask == null)
viewPagerTask = new ViewPagerTask();
}
/**
* 必须调用
*
* @param isAutoRoll
* @param adapter
*/
// rollViewPager.init(false, null, rollViewPagerAdapter);
public void init(boolean isAutoRoll, ArrayList<ImageView> dots, RollViewPagerAdapter adapter) {
this.dots = dots;
this.adapter = adapter;
setOnPageChangeListener(new SimpleOnPageChangeListener());
setAdapter(adapter);
if (isAutoRoll)
handler.postDelayed(viewPagerTask, ROLL_DURATION);
}
private OnViewPagerChangeListener onViewPagerChangeListener;
public void setOnViewPagerChangeListener(OnViewPagerChangeListener onViewPagerChangeListener) {
this.onViewPagerChangeListener = onViewPagerChangeListener;
}
public class ViewPagerTask implements Runnable {
@Override
public void run() {
if (adapter.getCount() > 0) {
long offTime =System.currentTimeMillis()-currentTimeMillis;
Log.e("handleMessage offTime", offTime+"");
if(offTime>2200)
currentItem = (currentItem + 1) % adapter.getCount();
handler.obtainMessage().sendToTarget();
}
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
setCurrentItem(currentItem);
handler.postDelayed(viewPagerTask, ROLL_DURATION);
}
};
private long currentTimeMillis=0;
class SimpleOnPageChangeListener implements OnPageChangeListener {
int oldPosition = 0;
@Override
public void onPageSelected(int position) {
currentTimeMillis = System.currentTimeMillis();
mIsChanged = true;
currentItem = position;
if (dots != null && dots.size() > 0) {
if (position >= dots.size()) {
Log.e("onPageSelected", "onPageSelected error");
currentItem = 0;
dots.get(0).setBackgroundResource(R.drawable.dot_focus);
return;
}
dots.get(position).setBackgroundResource(R.drawable.dot_focus);
dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);
if (position == 1) {
dots.get(0).setBackgroundResource(R.drawable.dot_normal);
}
}
oldPosition = position;
if (onViewPagerChangeListener != null)
onViewPagerChangeListener.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int pState) {
if (ViewPager.SCROLL_STATE_IDLE == pState) {
if (mIsChanged) {
mIsChanged = false;
RollViewPager.this.setCurrentItem(currentItem, false);
}
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
}
public interface OnViewPagerChangeListener {
void onPageSelected(int position);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
handler.removeCallbacksAndMessages(null);
}
}
private int currentItem;
private final int ROLL_DURATION = 3000;
private boolean mIsChanged = false;
private ArrayList<ImageView> dots;// 点的位置不固定,所以需要让调用者传入
private ViewPagerTask viewPagerTask;
private RollViewPagerAdapter adapter;
public RollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
if (viewPagerTask == null)
viewPagerTask = new ViewPagerTask();
}
public RollViewPager(Context context) {
super(context);
if (viewPagerTask == null)
viewPagerTask = new ViewPagerTask();
}
/**
* 必须调用
*
* @param isAutoRoll
* @param adapter
*/
// rollViewPager.init(false, null, rollViewPagerAdapter);
public void init(boolean isAutoRoll, ArrayList<ImageView> dots, RollViewPagerAdapter adapter) {
this.dots = dots;
this.adapter = adapter;
setOnPageChangeListener(new SimpleOnPageChangeListener());
setAdapter(adapter);
if (isAutoRoll)
handler.postDelayed(viewPagerTask, ROLL_DURATION);
}
private OnViewPagerChangeListener onViewPagerChangeListener;
public void setOnViewPagerChangeListener(OnViewPagerChangeListener onViewPagerChangeListener) {
this.onViewPagerChangeListener = onViewPagerChangeListener;
}
public class ViewPagerTask implements Runnable {
@Override
public void run() {
if (adapter.getCount() > 0) {
long offTime =System.currentTimeMillis()-currentTimeMillis;
Log.e("handleMessage offTime", offTime+"");
if(offTime>2200)
currentItem = (currentItem + 1) % adapter.getCount();
handler.obtainMessage().sendToTarget();
}
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
setCurrentItem(currentItem);
handler.postDelayed(viewPagerTask, ROLL_DURATION);
}
};
private long currentTimeMillis=0;
class SimpleOnPageChangeListener implements OnPageChangeListener {
int oldPosition = 0;
@Override
public void onPageSelected(int position) {
currentTimeMillis = System.currentTimeMillis();
mIsChanged = true;
currentItem = position;
if (dots != null && dots.size() > 0) {
if (position >= dots.size()) {
Log.e("onPageSelected", "onPageSelected error");
currentItem = 0;
dots.get(0).setBackgroundResource(R.drawable.dot_focus);
return;
}
dots.get(position).setBackgroundResource(R.drawable.dot_focus);
dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);
if (position == 1) {
dots.get(0).setBackgroundResource(R.drawable.dot_normal);
}
}
oldPosition = position;
if (onViewPagerChangeListener != null)
onViewPagerChangeListener.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int pState) {
if (ViewPager.SCROLL_STATE_IDLE == pState) {
if (mIsChanged) {
mIsChanged = false;
RollViewPager.this.setCurrentItem(currentItem, false);
}
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
}
public interface OnViewPagerChangeListener {
void onPageSelected(int position);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
handler.removeCallbacksAndMessages(null);
}
}
0 2
- viewpager自动循环滑动和手动滑动(手动滑动后自动滑动延后处理)
- Viewpager 自动左右无线滑动 手动滑动
- Android ViewPager实现无限循环(2.加入小圆点,优化自动和手动滑动冲突)
- android 轮播图手动循环滑动+自动循环滑动
- 轮播图Viewpager支持手动滑动定时滑动和自动加载图片页数
- Android中ViewPager常用功能2----广告栏自动滑动和手动滑动
- viewpager左右循环滑动,自动滑动广告栏
- Android---ViewPager循环滑动+自动滑动
- ViewPager禁止手动滑动
- Android 滑动切换(首页展示,图片、新闻自动切换,循环切换,自动和手动)
- ViewPager自动无限循环滑动
- ViewPager的自动循环滑动
- ViewPager自动切换及手动滑动重新计时的问题
- Banner展示手动滑动、自动播放
- Android-ViewPager自动滑动
- [android]bunner的自动滚动和手动滑动
- ViewPager轮播图自动无限循环滑动,手指按住停止滑动
- ViewPager左右滑动,自动循环播放
- NYOJ-整除个数(水题)
- 游戏中的常用术语
- 关注健康橱柜请选择环保陶瓷橱柜、水泥橱柜、瓷砖橱柜
- Android EditText输入字数限制总结(包括中文输入内存溢出的解决方法)
- 万物鼻祖Object和Java异常
- viewpager自动循环滑动和手动滑动(手动滑动后自动滑动延后处理)
- vs2013 激活
- 手机评测怎么看?
- 享元模式
- KMP字符串模式匹配详解
- Jboss eap 6.1 用户配置与登录管理控制台备忘
- MVC Log4net
- 缩放控制ZoomControls
- QT 跨线程信号的注册