2016-06-20 41 views
1

我创建了一个RecyclerView ItemTouchHelper这样的 -刷卡左/右RecyclerView的行部分

public class MyItemTouchHelper extends android.support.v7.widget.helper.ItemTouchHelper.SimpleCallback { 
private final Paint p; 
Context mContext; 

@Override 
public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) { 
    return viewHolder.itemView.getWidth()/3; 
} 

public MyItemTouchHelper(Context context) { 
    super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT); 
    mContext = context; 
    p = new Paint(); 

} 

@Override 
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
    return false; 
} 


@Override 
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { 
    int position = viewHolder.getAdapterPosition(); 

    if (direction == ItemTouchHelper.LEFT) { 
    } else { 
    } 
} 


@Override 
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder 
     viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { 
    Bitmap icon; 
    String text = "Like it, remind me!"; 

    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { 
     View itemView = viewHolder.itemView; 

     float height = (float) itemView.getBottom() - (float) itemView.getTop(); 
     float width = height/10; 
     if (dX > 0) { 
      p.setColor(Color.parseColor("#388E3C")); 

      RectF background = new RectF((float) itemView.getLeft(), (float) itemView.getTop(), dX/3, (float) itemView.getBottom()); 
      c.drawRect(background, p); 

      Rect r = new Rect(); 
      p.getTextBounds(text, 0, text.length(), r); 
      float yPos = height/2; 

      yPos += (Math.abs(r.height()))/2; 
      int xPos = (c.getWidth()/2); 
      p.setTextAlign(Paint.Align.CENTER); 
      c.drawText(text,(float)xPos , yPos, p); 
     } else { 
      p.setColor(Color.parseColor("#D32F2F")); 

      RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom()); 
      c.drawRect(background, p); 


      RectF icon_dest = new RectF((float) itemView.getRight() - 2 * width, (float) itemView.getTop() + width, (float) itemView.getRight() - width, (float) itemView.getBottom() - width); 
     } 

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

} 

}

但这刷整行关闭屏幕,我只是想排的25%置换。让我知道任何提示前进..

+0

我用下面的库来实现。 https://github.com/droidxiao/SwipeMenuRecyclerView [![这是刷卡后的视图](https://i.stack.imgur.com/dJPj8.png)](https://i.stack.imgur.com /dJPj8.png)所以当你向左滑动时,右边的视图位于左上方。这意味着左视图不会离开屏幕。这是来自右侧的视图阻止了左视图。因此,在视图的xml文件来自右侧,使android:layout_gravity =“右”(保持所有视图的权利,以便它不会阻止左视图)。希望能帮助到你.....! –

回答

0

重写onChildDraw并将dX除以大于1的因子,然后将其传递给super.onChildDraw方法。对于查看者通过滑动移动dX,它将在移动dX/factor时在屏幕上绘制。