Android 无处理程序postdelayed和setcurrentitem的Viewpager自动滚动
我想在不使用setCurrentItem()函数的情况下实现自动viewpager滚动。因为当我将setcurrentitem()与handler.postdelayed()一起使用时,它在设置下一项后保持不变。我想要一个像recyclerview一样的平滑卷轴。是否可以使用viewpager实现此功能?您可以使用viewpager实现此功能。最好的旋转木马是使用recylerview。但是,您需要首先自定义LayoutManager,以像旋转木马一样降低速度 创建回收视图Android 无处理程序postdelayed和setcurrentitem的Viewpager自动滚动,android,scroll,android-viewpager,android-recyclerview,automatic-differentiation,Android,Scroll,Android Viewpager,Android Recyclerview,Automatic Differentiation,我想在不使用setCurrentItem()函数的情况下实现自动viewpager滚动。因为当我将setcurrentitem()与handler.postdelayed()一起使用时,它在设置下一项后保持不变。我想要一个像recyclerview一样的平滑卷轴。是否可以使用viewpager实现此功能?您可以使用viewpager实现此功能。最好的旋转木马是使用recylerview。但是,您需要首先自定义LayoutManager,以像旋转木马一样降低速度 创建回收视图 CustomLayo
CustomLayoutManager layoutManager = new CustomLayoutManager(getActivity());
layoutManager.setSpeed(1500f);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
然后创建CustomLayoutManager以更改recylcerview滚动的速度
public class CustomLayoutManager extends LinearLayoutManager {
private float MILLISECONDS_PER_INCH = 1100f;
private Context mContext;
public CustomLayoutManager(Context context) {
super(context);
mContext = context;
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, final int position) {
LinearSmoothScroller smoothScroller = new LinearSmoothScroller(mContext) {
@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return CustomLayoutManager.this.computeScrollVectorForPosition(targetPosition);
}
@Override
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
return MILLISECONDS_PER_INCH/displayMetrics.densityDpi;
}
};
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
public void setSpeed(float speed){
this.MILLISECONDS_PER_INCH = speed;
}
}
然后在活动或片段中,创建Runnable
Runnable runNews = new Runnable() {
@Override
public void run() {
try {
top_new_rview.smoothScrollToPosition(++counter);
handler.postDelayed(this, replay);
} catch (Exception e) {
handler.removeCallbacks(runNews);
onError(getActivity(), e);
}
}
};