2016-04-28 206 views
2

我有一個線性佈局視圖,其背景我已設置爲橢圓形純色。到目前爲止,我的背景是圓圈。現在我想要達到同樣的效果,即使用可繪製的形狀來獲得2色的圓。請參照附件。Android橢圓形2色

enter image description here

+0

ü要實現ü如右圖所示的圖像? –

+0

Hi @ZahanSafallwa是的,這是我想要達到的 –

+0

以上使用'LayerDrawable'有兩層:一個是正常的藍色橢圓形,第二個是綠色的橢圓形包裹'ClipDrawable',但老實說爲什麼要做到這一點如果你可以創建一個自定義的'Drawable'類,那麼你可以繪製任何你想要的東西? – pskink

回答

3

在繪製文件夾 shape.xml創建shape.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval" > 
<gradient android:startColor="#0000FF" android:endColor="#00FF00" 
android:angle="270"/> 
</shape> 
+0

並將此shape.xml添加到您的視圖背景 –

+0

好的答案,它將看起來完全如上圖所示,用android:shape =「ring」替代 android:shape =「oval」行。 因此,最終的XML將如下所示: - <?xml version =「1.0」encoding =「utf-8」?> <梯度機器人:startColor = 「#0000FF」 機器人:ENDCOLOR = 「#00FF00」 機器人:角= 「270」/> 總體你的答案是隻是真棒。 @Damini –

1

這可能來晚了,但我已經很難找到很好的答案,以便聽到我服食。

我使用自定義drawable繪製圓形,並使用由位置數組配置的LinearGradient着色器不具有漸變過渡。梯度線方向在LinearGradient構造函數中進行配置(這裏是對角線)。

public class MultiColorCircleDrawable extends Drawable { 

    private Paint paint; 
    private int[] colors; 

    public MultiColorOvalDrawable(int[] colors) { 
     this.colors = colors; 
    } 

    private void init() { 
     paint = new Paint(); 
     paint.setShader(createShader()); 
    } 

    private Shader createShader() { 
     int[] colorsArray = new int[colors.length * 2]; 
     float[] positions = new float[colors.length * 2]; 

     for (int i = 0; i < colors.length; i++) { 
      int y = i * 2; 
      int color = colors[i]; 
      colorsArray[y] = color; 
      colorsArray[y+1] = color; 
      positions[y] = 1f/colors.length * i; 
      positions[y+1] = 1f/colors.length * (i+1); 
     } 

     Rect bounds = getBounds(); 
     int width = bounds.right - bounds.left; 
     int height = bounds.bottom - bounds.top; 

     return new LinearGradient(0, 0, width, height, colorsArray, positions, Shader.TileMode.REPEAT); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     if (null == paint) { 
      init(); 
     } 

     Rect bounds = getBounds(); 
     int width = bounds.right - bounds.left; 
     int height = bounds.bottom - bounds.top; 
     canvas.drawCircle(width/2, height/2, (width/2) - strokeWidth, maskPaint); 
    } 

    @Override 
    public void setAlpha(int i) { 

    } 

    @Override 
    public void setColorFilter(ColorFilter colorFilter) { 

    } 

    @Override 
    public int getOpacity() { 
     return PixelFormat.OPAQUE; 
    } 
} 
4
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 

    <gradient 
     android:centerX="-1" 
     android:type="sweep" 
     android:startColor="color1" 
     android:endColor="color2" 
     /> 

</shape> 
+0

當給出答案時,最好給出[關於爲什麼你的答案的一些解釋](http://stackoverflow.com/help/how-to-answer)。 –

+1

Audo它的作品,但是如果我想讓顏色垂直分割(左/右)而不是水平分割,我必須做些什麼? – murt