2011-10-11 80 views
1

我有一個錶盤,可以顯示風向,並且箭頭在某些位置顯示良好,但其他邊緣則像素化。這裏是呈現圖像的代碼:圖像邊緣像素化取決於位置Android

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

任何想法如何處理這個問題?

回答

0

試圖定義一個噴漆的對象,並啓用消除鋸齒

這樣的:

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

我想這並沒有幫助...任何其他的想法?但是,謝謝你的嘗試! :) – taraloca