2016-04-28 16 views
2

I背景私は楕円形の固体の色に設定されている線形レイアウトビューを持っています。今のところ、私は背景が円である。今、私は同じことを達成したい、すなわち2つの色の円を得るために形状drawableを使用します。添付をご参照ください。アンドロイド楕円形状2色

enter image description here

+0

uがuは右図の画像を達成したいですか?一つは、通常の青い楕円形であり、第二は、 'ClipDrawable'に巻き付け緑色の楕円形で、正直なところ、なぜそれを作るために:これは私が二層に' LayerDrawable'を使用 –

+0

こんにちは@ZahanSafallwaはいあなたが好きなものを描くことができるカスタムの 'Drawable'クラスを作ることができたら、とても複雑です。 –

+0

上で達成したいものです – 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

とビューの背景に –

+0

ニースの答えをこのshape.xmlを追加し、それが正確になります。 <?xmlのバージョン= "1.0" エンコード= "UTF-8"> <形状のxmlns:アンドロイド= "http://schemas.android.com/apk/res/android - : だから、最終的には、XMLのようになります" アンドロイド:形状=" リング」> <勾配のandroid:startColor = "#1 0000FF" アンドロイド:endColor = "#00FF00" アンドロイド:角度= "270" /> 全体的にあなたの答えはただ驚くばかりです。 @Damini –

1

これは遅く来るかもしれないが、私は悩み良い答えを見つけることがあったので、私のテイクを聞きます。

私は勾配遷移を持たないように位置アレイによって構成されて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その作品ですが、水平にではなく、縦(LEFT/RIGHT)で色分けしたい場合はどうすればいいですか? – murt