2017-12-08 5 views
-1

Gradient should be very light on black background Ich versuche einen Halbkreis mit schwarzem Hintergrund und hellblauem Farbverlauf darauf zu bekommen (was wie ein Schein oder Schatten sichtbar ist) . Ich habe viele Möglichkeiten mit Tags in Android versucht, aber nicht in der Lage, genau das zu bekommen, was ich brauche. Kann mir bitte jemand dabei helfen?Schwarzer Hintergrund mit Lichtfarbe Farbverlauf oben in Halbkreisform

Vielen Dank im Voraus.

+3

Bitte zeigen Sie Ihre neuesten Nicht-Arbeits Versuch zur Lösung dieses Problems verwenden können. – vinS

Antwort

0

Sie können einen kreisförmigen Gradienten android:type="radial" mit bekommen:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient android:type="radial" android:gradientRadius="250" 
     android:startColor="your start color" android:endColor="your end color" /> 
</shape> 

für Halbkreis Sie diesen Code

public class SemiCircleDrawable extends Drawable { 

    private Paint paint; 
    private RectF rectF; 
    private int color; 
    private Direction angle; 

    public enum Direction 
    { 
     LEFT, 
     RIGHT, 
     TOP, 
     BOTTOM 
    } 

    public SemiCircleDrawable() { 
     this(Color.BLUE, Direction.LEFT); 
    } 

    public SemiCircleDrawable(int color, Direction angle) { 
     this.color = color; 
     this.angle = angle; 
     paint = new Paint(); 
     paint.setColor(color); 
     paint.setStyle(Style.FILL); 
     rectF = new RectF(); 
    } 

    public int getColor() { 
     return color; 
    } 

    /** 
    * A 32bit color not a color resources. 
    * @param color 
    */ 
    public void setColor(int color) { 
     this.color = color; 
     paint.setColor(color); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     canvas.save(); 

     Rect bounds = getBounds(); 

     if(angle == Direction.LEFT || angle == Direction.RIGHT) 
     { 
      canvas.scale(2, 1); 
      if(angle == Direction.RIGHT) 
      { 
       canvas.translate(-(bounds.right/2), 0); 
      } 
     } 
     else 
     { 
      canvas.scale(1, 2); 
      if(angle == Direction.BOTTOM) 
      { 
       canvas.translate(0, -(bounds.bottom/2)); 
      } 
     } 


     rectF.set(bounds); 

     if(angle == Direction.LEFT) 
      canvas.drawArc(rectF, 90, 180, true, paint); 
     else if(angle == Direction.TOP) 
      canvas.drawArc(rectF, -180, 180, true, paint); 
     else if(angle == Direction.RIGHT) 
      canvas.drawArc(rectF, 270, 180, true, paint); 
     else if(angle == Direction.BOTTOM) 
      canvas.drawArc(rectF, 0, 180, true, paint); 
    } 

    @Override 
    public void setAlpha(int alpha) { 
     // Has no effect 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
     // Has no effect 
    } 

    @Override 
    public int getOpacity() { 
     // Not Implemented 
     return 0; 
    } 

}