1

背景を回転させて回転したイメージビューを作成しましたが、結果は「エイリアス」になります。

通常の方法は、Paintアンチエイリアスフラグを使用して作成し、それを使用してビットマップを描画することです。ただし、背景はビューのdraw(Canvas canvas)方法で描画されているため、方法でペイントを使用することはできませんcanvas.drawBitmap

ここに、背景を含むimageviewを回転させるための私のコード:

@Override
    public void draw(Canvas canvas)
    {
        canvas.save();
        canvas.rotate(mAngle%360, canvas.getClipBounds().exactCenterX(), canvas.getClipBounds().exactCenterY());
        canvas.scale(scaleWidth, scaleHeight, canvas.getClipBounds().exactCenterX(), canvas.getClipBounds().exactCenterY());
        super.draw(canvas);

        canvas.restore();

}

角度に応じて高さと幅を調整する私のonMeasureメソッド

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int w = getDrawable().getIntrinsicWidth();
    int h = getDrawable().getIntrinsicHeight();
    double a = Math.toRadians(mAngle);

    int width = (int) (Math.abs(w * Math.cos(a)) + Math.abs(h * Math.sin(a)));
    int height = (int) (Math.abs(w * Math.sin(a)) + Math.abs(h * Math.cos(a)));

    scaleWidth = (width != 0) ? ((float) w) / width : 1;
    scaleHeight = (height != 0) ? ((float) h) / height : 1;

    setMeasuredDimension(width, height);
}

では、このローテーションでアンチエイリアシングを「有効」にするにはどうすればよいですか?

4

1 に答える 1

1

たぶん、キャンバスで setDrawFilter を使用しますか?

DrawFilter サブクラスは Canvas にインストールできます。存在する場合、描画に使用されるペイントを (一時的に) 変更できます。これにより、フィルターはアンチエイリアシングを無効/有効にしたり、描画されるすべての色を変更したりできます。

編集: ここを参照してください: https://stackoverflow.com/a/13191948/1954497

于 2013-02-27T12:09:43.290 に答える