2017-08-03 2 views
0

Ich erstelle eine Spielautomat-Anwendung und dafür verwende ich RecycleView als Schiene. Daher sind alle touch \ click \ scroll-Ereignisse für RecyclerView deaktiviert.RecyclerView - Fling Stop nach Berührung deaktivieren

Und um "Spin" zu machen, habe ich RecyclerView.fling(...) Methode verwendet, da es bessere Animation hat.

ABER scheinbar Fälschung aufhört, wenn ich die Recycleransicht berühre. Warum? Und wie kann ich das deaktivieren?

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"/> 

init von 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); 

Adapter tut nichts Besonderes. Es ist nur in der Ansicht und hat keine Klick-Touch-Evenets auf ihnen.

RecyclerViewDisabler:

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) {} 
} 

Antwort

0

Lesen Sie einfach Dokumentation vorsicht und gefunden Lösung. Ich musste dispatchTouchEvenet manuell verbrauchen. Siehe Code:

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 
    } 
} 
Verwandte Themen