图像边缘像素化取决于Android的位置

时间:2011-10-11 11:49:24

标签: android image alias

我有一个表盘,我显示风向并且箭头在某些位置显示得很好,但是其他的边缘是像素化的。以下是渲染图像的代码:

public class DialView extends View {

private Context mContext;
private Bitmap mArrow;
private WeatherDataModel mWdm;
private float iters = 10.0f;
private static float previousAngle = 0.0f;
private int mHourIndex = 0;
private boolean isHourly = false;
private final int XLARGE = 0x4;

public DialView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    int screenLayout = mContext.getApplicationContext().getResources().getConfiguration().screenLayout;
    mArrow = Utilities.applyFilter(context, BitmapFactory.decodeResource(context.getResources(), R.drawable.wind_arrow));
}

@Override
public void onDraw(Canvas canvas) {
    float degrees = 0.0f;
    degrees = (!isHourly) ? cardinalToDegrees(mWdm) : cardinalToDegrees(mWdm.hourly.get(mHourIndex));
    Bitmap bit;
    int originY = getHeight() / 2;
    int originX = getWidth() / 2;
    int r = originY > originX ? getWidth() * 8 / 27 : getHeight() * 8 / 27;
    int x, y;
    Matrix matrix = new Matrix();

    degrees = (previousAngle * (iters / 10.0f) + degrees * (10.0f - iters) / 10.0f);
    //Log.d(DEBUG_TAG, "Previous angle = " + previousAngle + " degrees" + degrees);
    matrix.postRotate(degrees - 90.f);
    bit = Bitmap.createBitmap(mArrow, 0, 0, mArrow.getWidth(), mArrow.getHeight(), matrix, false);
    x = (int)(Math.cos(Math.PI * degrees / 180.0f) * r) + originX - (bit.getWidth() / 2);
    y = (int)(Math.sin(Math.PI * degrees / 180.0f) * r) + originY - (bit.getHeight() / 2);
    //Log.d(DEBUG_TAG, "x: " + x + " y: " + y);
    canvas.drawBitmap(bit, x, y, null);
    if (iters > 0) {
        invalidate();
        iters--;
    }
    previousAngle = degrees;
}

这是箭头好: enter image description here

这里是像素化的: enter image description here

任何想法如何处理?

1 个答案:

答案 0 :(得分:0)

尝试定义绘制对象并启用AntiAlias

像这样:

mPaint.setAntiAlias(true);
canvas.drawBitmap(bit, x, y, mPaint);