2017-12-11 33 views
0

アイテムをスワイプすると、背景が別の色で塗りつぶされ、アイコンが表示されます。すべてうまくいきますが、アイテムの高さによってアイコンのサイズが変わってしまうのは嫌です。どうぞ教えてくださいアイコンいつもは同じサイズのままですRecyclerViewでスワイプ(アイコンサイズ)

このコードを使用して、背景とアイコンを描画します。

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

     float height = (float) itemView.getBottom() - (float) itemView.getTop(); 
     float width = height/3; 

     Paint p = new Paint(); 
     Bitmap icon; 

     if (dX > 0) { 
      p.setColor(ResourcesCompat.getColor(getResources(), R.color.red, null)); 
      RectF background = new RectF((float) itemView.getLeft(), (float) itemView.getTop(), dX, (float) itemView.getBottom()); 
      c.drawRect(background, p); 

      Drawable d = getResources().getDrawable(R.drawable.ic_delete_white_24dp); 
      icon = drawableToBitmap(d); 
      RectF iconDest = new RectF((float) itemView.getLeft() + width, (float) itemView.getTop() + width, (float) itemView.getLeft() + 2 * width, (float) itemView.getBottom() - width); 
      c.drawBitmap(icon, null, iconDest, p); 

     } else { 
      p.setColor(ResourcesCompat.getColor(getResources(), R.color.green, null)); 
      RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom()); 
      c.drawRect(background, p); 

      Drawable d = getResources().getDrawable(R.drawable.ic_done_white_24dp); 
      icon = drawableToBitmap(d); 
      RectF iconDest = new RectF((float) itemView.getRight() - 2 * width, (float) itemView.getTop() + width, (float) itemView.getRight() - width, (float) itemView.getBottom() - width); 
      c.drawBitmap(icon, null, iconDest, p); 
     } 

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

答えて

0

RectFは、図の座標ではなく境界線を使用します。アイコンのサイズを保存するには、アイコンのサイズを考慮して境界を指定する必要があります。

左のアイコンです。

Drawable d = getResources().getDrawable(R.drawable.ic_delete_white_24dp); 
icon = drawableToBitmap(d); 

int iconWidth = icon.getWidth(); 
int iconHeight = icon.getHeight(); 

float leftPosition = iconWidth; 
float rightPosition = leftPosition + iconWidth; 
float topPosition = itemView.getTop() + ((height - iconHeight)/2); 
float bottomPosition = topPosition + iconHeight; 

RectF iconDest = new RectF(leftPosition, topPosition, rightPosition, bottomPosition); 
c.drawBitmap(icon, null, iconDest, p); 

右側のアイコンです。

Drawable d = getResources().getDrawable(R.drawable.ic_done_white_24dp); 
icon = drawableToBitmap(d); 

int iconWidth = icon.getWidth(); 
int iconHeight = icon.getHeight(); 

float rightPosition = itemView.getRight() - iconWidth; 
float leftPosition = rightPosition - iconWidth; 
float topPosition = itemView.getTop() + ((height - iconHeight)/2); 
float bottomPosition = topPosition + iconHeight; 

RectF iconDest = new RectF(leftPosition, topPosition, rightPosition, bottomPosition); 
c.drawBitmap(icon, null, iconDest, p); 
関連する問題