1

我创建了一个带有背景旋转的旋转图像视图,但结果是“别名”。

通常的方法是创建一个Paint带有抗锯齿标志,然后用它来绘制位图。但是,背景是通过视图的draw(Canvas canvas)方法绘制的,所以我不能使用带有canvas.drawBitmap方法的绘制。

这是我的代码来旋转包括背景的图像视图:

@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 回答