2010-05-29 146 views
29

有幾個答案提到使用GradientDrawable.setDither(true)在Android中繪製平滑漸變。這對我的代碼沒有任何影響。任何想法,我必須改變,以獲得我的活壁紙看起來很好的漸變?如何在Android中在畫布上繪製平滑/漸變的漸變

GradientDrawable gradient = new GradientDrawable(Orientation.TL_BR, colors); 
gradient.setGradientType(GradientDrawable.RADIAL_GRADIENT); 
gradient.setGradientRadius(canvas.getWidth() * 2); 
gradient.setDither(true); 
gradient.setGradientCenter(-0.1f, -0.1f); 
gradient.setBounds(cb); 
gradient.draw(canvas); 

回答

67

看到你有一個畫布可以使用。這裏有一個選項。

private Bitmap makeRadGrad() { 
    RadialGradient gradient = new RadialGradient(200, 200, 200, 0xFFFFFFFF, 
      0xFF000000, android.graphics.Shader.TileMode.CLAMP); 
    Paint p = new Paint(); 
    p.setDither(true); 
    p.setShader(gradient); 

    Bitmap bitmap = Bitmap.createBitmap(400, 400, Config.ARGB_8888); 
    Canvas c = new Canvas(bitmap); 
    c.drawCircle(200, 200, 200, p); 

    return bitmap; 
} 

結果:

Result

+0

我不完全明白的是,爲什麼你要定義座標('200,200,200')兩次。我應該如何動態調整'onDraw()'方法中漸變的位置和最重要的尺寸? – 2014-04-23 07:49:34

+2

第一個座標定義了漸變的大小,第二個座標描述了包含漸變的圓的大小。如果座標不相同,則漸變不會填充圓或者會被圓邊限制切掉。 – 2014-12-10 15:15:08