回收器视图 - 触摸后禁用投掷停止



我正在创建一个老虎机应用程序,为此我使用RecycleView作为轨道。因此,所有触摸\单击\滚动事件都将禁用RecyclerView

为了使"旋转",我使用了RecyclerView.fling(...)方法,因为它具有更好的动画。

但是当我触摸回收器视图时,似乎停止了。为什么?我怎样才能禁用它?

.xml:

<android.support.v7.widget.RecyclerView
android:id="@+id/rv_rail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/margin_4"
android:layout_marginStart="@dimen/margin_4"
android:layout_weight="1"
android:padding="@dimen/dp_16"/>

RecyclerView的初始化:

LinearLayoutManager mRailLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);       
mRailsBinding.rvRail.setHasFixedSize(true);
new LinearSnapHelper().attachToRecyclerView(mRailsBinding.rvRail);
mRailsBinding.rvRail.setLayoutManager(mRailLayoutManager);
mRailsBinding.rvRail.addOnItemTouchListener(new RecyclerViewDisabler());
mRailsBinding.rvRail.addOnScrollListener(railScrollListener); //checking here for time when scroll ended
mRailsBinding.rvRail.setAdapter(mRailAdapter);

适配器不做任何特殊的事情。它只是输入视图,没有点击\触摸偶数。

回收器视图禁用器:

public class RecyclerViewDisabler implements RecyclerView.OnItemTouchListener {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
return true;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean state) {}
}

只需仔细阅读文档即可找到解决方案。我需要手动消耗dispatchTouchEvenet。请参阅代码:

public class UntouchableRecyclerView extends RecyclerView {
public UntouchableRecyclerView(Context context) {
super(context);
}
public UntouchableRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public UntouchableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return true; //consume
}
}

最新更新