Как повернуть drawable с включенным сглаживанием

Я должен повернуть ImageView на несколько градусов. Я делаю это путем разделения на подклассы ImageView и перегрузки onDraw()

@Override
protected void onDraw(Canvas canvas) {
    canvas.save();
    canvas.scale(0.92f,0.92f);
    canvas.translate(14, 0);
    canvas.rotate(1,0,0);
    super.onDraw(canvas);
    canvas.restore();
}

Проблема состоит в том, что изображение, которое заканчивается, показывает набор неровностей.

http://img.skitch.com/20100608-gmdy4sexsm1c71di9rgiktdjhu.png

Как я могу сгладить ImageView, который я должен повернуть для устранения неровностей? Существует ли лучший способ сделать это?

8
задан emmby 8 June 2010 в 23:30
поделиться

1 ответ

Если вы знаете, что ваш Drawable является BitmapDrawable, вы можете использовать сглаживание в Paint растрового изображения, чтобы сделать что-то вроде следующего:

/**
 * Not as full featured as ImageView.onDraw().  Does not handle 
 * drawables other than BitmapDrawable, crop to padding, or other adjustments.
 */
@Override
protected void onDraw(Canvas canvas) {
    final Drawable d = getDrawable();

    if( d!=null && d instanceof BitmapDrawable && ((BitmapDrawable)d).getBitmap()!=null ) {
        final Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
        final int paddingLeft = getPaddingLeft();
        final int paddingTop = getPaddingTop();

        canvas.save();

        // do my rotation and other adjustments
        canvas.scale(0.92f,0.92f);
        canvas.rotate(1,0,0);

        if( paddingLeft!=0 )
            canvas.translate(paddingLeft,0);

        if( paddingTop!=0 )
            canvas.translate(0,paddingTop);

        canvas.drawBitmap( ((BitmapDrawable)d).getBitmap(),0,0,p );
        canvas.restore();
    }
}
5
ответ дан 5 December 2019 в 17:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: