[英]Swipe in RecyclerView (icon size)
滑動項目時,背景會用另一種顏色着色,並顯示一個圖標。 一切正常,但我不喜歡圖標根據項目的高度更改大小的事實。 請告訴我如何使 圖標始終保持相同大小 ?
我使用此代碼繪制背景和圖標。
@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);
}
}
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.