2016-06-20 11 views
1

Ich habe erstellt ein RecyclerView ItemTouchHelper so -Swipe links/rechts RecyclerView die Reihe teilweise

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

} 

}

Aber das ist die ganze Zeile aus dem Bildschirm klauen, ich will nur 25% der Reihe zu verschieben, . Lassen Sie mich einen Hinweis darauf wissen.

+0

Ich habe unten Bibliothek zu implementieren. https://github.com/droidxiao/SwipeMenuRecyclerView [! [Dies ist die Ansicht nach dem Swipe] (https://i.stack.imgur.com/dJPj8.png)] (https://i.stack.imgur.com /dJPj8.png) Wenn Sie also nach links wischen, befindet sich die rechte Ansicht oben links. Es bedeutet, dass die linke Ansicht den Bildschirm nicht verlässt. Es ist eine Ansicht von rechts, die die linke Ansicht blockiert. Also in der xml-Datei der Ansicht, die von rechts kommt, make android: layout_gravity = "right" (Hält alle Ansichten nach rechts, so dass sie die linke Ansicht nicht blockieren). Ich hoffe es hilft.....! –

Antwort

0

Überschreiben Sie onChildDraw und teilen Sie dX um einen Faktor größer als eins, bevor Sie es an die Methode super.onChildDraw übergeben. Wenn ein Ansichtshalter dX durch Wischen bewegt wird, wird er auf dem Bildschirm als verschoben dargestellt dX/factor.

Verwandte Themen