2013-02-26 109 views
1

我創建了一個帶背景旋轉的旋轉圖像視圖,但結果是「別名」。背景上的旋轉圖像的抗鋸齒?

通常的方法是創建一個Paint具有反別名標誌,然後用它來繪製位圖。 但是,背景是通過視圖的draw(Canvas canvas)方法繪製的,所以我無法使用canvas.drawBitmap方法繪製。

這裏我的代碼以旋轉的ImageView包括背景:

@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); 
} 

所以寬度,我如何「在這個旋轉上啓用「anti aliasing?

+0

見http://stackoverflow.com/questions/14378573/bitmap-not-drawn-anti-aliased/14443954#14443954 – yoah 2013-02-26 20:06:44

+0

我已經看到了這個問題,但我的旋轉也關注背景,並且背景由view.draw()方法繪製。所以我不能使用這個解決方案 – Goo 2013-02-26 20:25:23

回答

1

也許在畫布上使用setDrawFilter?

DrawFilter子類可以安裝在Canvas中。當它存在時,它可以修改用於繪製(臨時)的油漆。有了這個,過濾器可以禁用/啓用抗鋸齒功能,或改變繪製的所有內容的顏色。

編輯:在這裏看到:https://stackoverflow.com/a/13191948/1954497