2016-03-22 4 views
1

最初にアイテムをスワイプするか、フルスワイプを実行するか、現在のポイントで停止する必要があります。 Yandexメールのように。私はクラスItemTouchHelpersのある時点でスワイプを止めるには?

ItemTouchHelperCallback extends ItemTouchHelper.Callback 

と私、私は似た何かをするために必要な方法

@Override 
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { 
    View itemView = viewHolder.itemView; 

    // not sure why, but this method get's called for viewholder that are already swiped away 
    if (viewHolder.getAdapterPosition() == -1) { 
     // not interested in those 
     return; 
    } 

    float height = (float) itemView.getBottom() - (float) itemView.getTop(); 
    float width = height/3; 
    float temdX=0; 
    Bitmap icon; 
    if(dX > 0 || lastdX>0){ 

     //try stop item while back in dx=0, but workin only while i debug 
     if(lastdX>=100 && dX==0 &&lastdX!=0 &&lastdX!=-720) 
     { 
      dX=100; 
      isCurrentlyActive=true; 

     } 
     lastdX=dX; 
     itemView.setLeft((int) dX); 
     p.setColor(Color.GREEN); 
     RectF background = new RectF((float) itemView.getLeft(), (float) itemView.getTop(), dX,(float) itemView.getBottom()); 
     c.drawRect(background,p); 
     icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_y); 
     RectF icon_dest = new RectF((float) itemView.getLeft() + width ,(float) itemView.getTop() + width, (float) itemView.getLeft()+ 2*width,(float)itemView.getBottom() - width); 
     c.drawBitmap(icon, null, icon_dest, p); 


    } else if(lastdX<0 || dX<0) { 
     if(lastdX<=-100 && dX==0 &&lastdX!=0 &&lastdX!=720) 
     { 
      dX=-100; 
      //itemView.setTranslationX(-200); 

      isCurrentlyActive=true; 
     } 
     lastdX=dX; 
     itemView.setRight((int)(dX)); 
     p.setColor(Color.RED); 
     RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(),(float) itemView.getRight(), (float) itemView.getBottom()); 
     c.drawRect(background,p); 

     icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_x); 
     RectF icon_dest = new RectF((float) itemView.getRight() - 2*width ,(float) itemView.getTop() + width, (float) itemView.getRight() - width,(float)itemView.getBottom() - width); 
     c.drawBitmap(icon,null,icon_dest,p); 

    } 
    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); 
} 

答えて

0

をオーバーライドして、先頭に内部を持っている私はsetLeft(dx)setRight(dx)を行うためにトリングたが、それは私が

を必要とするものではありませんItemTouchHelperで提供されているコールバックを使用することも考えました。それは正しいアプローチではないことが判明しました。

スワイプ中にビューの移動を停止(または一般的には制御)するには、変位dXの値を変更して保存できる必要があります。 ItemTouchHelperを使用する場合、この値は使用可能なコールバックの外で制御されます。

私の解決策は、リサイクラービューのビューホルダーに添付されたカスタムtouchListenerを使用したスワイプの実装でした。基本的な実装hereの例を見つけることができます。アイテムのクリックを考慮する必要がある場合は、これもtouchListenerに実装する必要があることに注意してください。

これは何とか便利ですか?

関連する問題