Края изображения пикселированы в зависимости от положения Android - PullRequest
1 голос
/ 11 октября 2011

У меня есть циферблат, в котором отображается направление ветра, и в некоторых позициях стрелка хорошо отображается, а в других ее края имеют пикселизацию. Вот код для рендеринга изображения:

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 голосов
/ 11 октября 2011

попытайтесь определить объект рисования и включите AntiAlias ​​

следующим образом:

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