2016-03-22 1 views
1

Мне нужно прорисовать элемент в начале или полностью проведите пальцем или остановитесь в текущей точке. Как в почте Яндекса. Я Тринг делать setLeft(dx) и setRight(dx), но это не то, что мне нужноКак остановить салфетки в какой-то момент в 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

мне нужно было сделать что-то подобное и в начале Я также думал использовать обратные вызовы, указанные в ItemTouchHelper. Оказалось, что это неправильный подход.

Если вы хотите остановить (или вообще контролировать) трансляцию вида во время прокрутки, вы должны иметь возможность изменять и сохранять значение смещения dX. Если вы используете ItemTouchHelper, это значение контролируется вне доступных обратных вызовов.

Решение для меня - это реализация салфетки с помощью custom touchListener, прикрепленного к владельцу вида просмотра ресайклера. Вы можете найти пример базовой реализации here. Если вам нужно рассмотреть щелчок на элементе, помните, что вам нужно реализовать его и в touchListener.

Надеюсь, это поможет.

Смежные вопросы