私はいつも一定の回転でView
を描く癖があります。Bitmap
メソッドを上書きしonDraw
、 を回転させ、Canvas
アンチエイリアスを使用してビットマップを描画しPaint
ます。
public RotatedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
someBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.placeholder);
}
@Override
protected void onDraw(Canvas canvas) {
// Save and rotate canvas
canvas.save();
canvas.rotate(3F, getWidth() / 2, getHeight());
// Draw the icon
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawBitmap(someBitmap, 0, 0, p);
canvas.drawRoundRect(new RectF(75, 50, 225, 200), 10, 10, p);
// All done; restore canvas
canvas.restore();
}
ただし、ビットマップのエッジは常にギザギザになります。丸みを帯びた四角形のエッジが適切にアンチエイリアス処理されていることに注意してください。また、p.setFilterBitmap(true);
これを適用すると (ビットマップ サーフェスがフィルター処理/スムーズ化されます) 正しく動作します。何か不足していますか?
以下は、リソースからロードされた非アンチエイリアス ビットマップを描画するビューを示す 1 つの画面の分離された例を含む最小限の Android プロジェクトです: https://bitbucket.org/erickok/antialiastest
更新:次のことも試しました:
Paint p = new Paint();
p.setAntiAlias(true);
p.setFilterBitmap(true);
p.setDither(true);
canvas.drawBitmap(someBitmap, 0, 0, p);
setFilterBitmap
しかし、これは表面をフィルタリングするので役に立ちません。エッジをアンチエイリアスしません。また、コンストラクターsetAntiAlias
でフラグを直接設定するのと同じことを行います。Paint
疑問がある場合は、私の最小限のテスト プロジェクトを試してください。助けてくれてありがとう!