2016-06-20 103 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時在屏幕上繪製。