簡體   English   中英

在RecyclerView中滑動(圖標大小)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM