此方法不好,太復(fù)雜了,還是用 viewflipper之類的吧
用RecyclerView 實現(xiàn)跑馬燈
用 RecyclerView 實現(xiàn)跑馬燈有幾點需要注意
Recyclerview 的 smoothScrollToPosition 方法默認(rèn)效果是直接滑到指定位置,看不到滑動效果,需要重寫 LayoutManager 中的 smoothScrollToPosition 方法才能看到緩慢滑動的效果。
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) {
@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return SmoothScrolLinearLayoutManager.this
.computeScrollVectorForPosition(targetPosition);
}
//This returns the milliseconds it takes to
//scroll one pixel.
@Override
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
return MILLISECONDS_PER_INCH / displayMetrics.density;
}
};
linearSmoothScroller.setTargetPosition(position);
startSmoothScroll(linearSmoothScroller);
}
要禁掉跑馬燈的隨手指滑動的效果,也要讓 Recyclerview 接收點擊事件。可以用以下代碼實現(xiàn)。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_UP) {
ev.setAction(MotionEvent.ACTION_DOWN);
mRv.dispatchTouchEvent(ev);
ev.setAction(MotionEvent.ACTION_UP);
mRv.dispatchTouchEvent(ev);
}
super.dispatchTouchEvent(ev);
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
return true;
}
return super.onInterceptTouchEvent(ev);
}
最終效果如下
screen.gif