Я должен повернуть 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, который я должен повернуть для устранения неровностей? Существует ли лучший способ сделать это?
Если вы знаете, что ваш 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();
}
}