创作背景
本文是继上一篇 Android自定义轮播效果 优化问题而写,希望大家能有顺序的看。
优化一:实现自动无线轮播
private class myPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
//第一步:让基数很大
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView iv = new ImageView(getApplicationContext());
//第二步:取余数,防止超过 list 的长度
iv.setImageResource(imgList.get(position%imgList.size()));
container.addView(iv);
return iv;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
//第三步:创建 Hnadler
private Handler mHandle = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
vp_my_viewpager.setCurrentItem(++mCurrentPage);
mHandle.sendEmptyMessageDelayed(0,3000);
}
};
//第四步:实现轮播
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
、、、
//设置当前页数
mCurrentPage = imgList.size() * 100;
vp_my_viewpager.setCurrentItem(mCurrentPage);
mHandle.sendEmptyMessageDelayed(0,3000);
}
优化二:改变轮播的速度
想改变 轮播的速度 目前 我只发现乐意中方法 就是通过反射的方式
说白了 其实是 自己重写 Scroller 中的 Duration ,然后把新的myScroller赋值给ViewPager
- 第一步:创建 myScroller 类
package com.wust.myhorizontalscrollview;
import android.content.Context;
import android.view.animation.Interpolator;
import android.widget.Scroller;
public class myScroller extends Scroller {
private int mDuration;
public myScroller(Context context, Interpolator interpolator,int duration) {
super(context, interpolator);
this.mDuration = duration;
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, duration);
}
}
- 第二步:通过反射找到 myScroller
- 第三步:设置值
//在setAdapter之后 设置myScroller
try {
//通过反射把这个字段找到
Field field = vp_my_viewpager.getClass().getDeclaredField("mScroller");
//把这个字段设置为可修改
field.setAccessible(true);
//创建自己的myScroller
myScroller myScroller = new myScroller(this, new AccelerateInterpolator(), 2000);
//修改值
field.set(vp_my_viewpager,myScroller);
} catch (Exception e) {
e.printStackTrace();
}