开发者

Image Edges Pixelated Depending on Position Android

开发者 https://www.devze.com 2023-04-12 09:52 出处:网络
I have a dial that I display wind direction in and the arrow displays well in some positions, but others its edges are pixelated.Here is the code to render the image:

I have a dial that I display wind direction in and the arrow displays well in some positions, but others its edges are pixelated. Here is the code to render the image:

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开发者_Python百科 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;
}

Here is the arrow good:

Image Edges Pixelated Depending on Position Android

Here it is pixelated:

Image Edges Pixelated Depending on Position Android

Any ideas how to handle this?


try to define a paint object and enable AntiAlias

like this:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号