11

開始=黄色、中心=紫、終了=青であるアンドロイドで放射状のグラデーションで標準の開始、中央、および終了の色を使用して、左側で以下のグラデーションを簡単に実現できます。ただし、右側の円では、中央の色を再配置する必要があります。これは可能ですか?

ここに画像の説明を入力してください

左の結果は、次のように再現できます。

    <shape android:shape="oval">
        <gradient
            android:endColor="#0000ff"
            android:gradientRadius="my_radius"
            android:centerColor="#770077"
            android:startColor="#00ffff"
            android:type="radial"/>
    </shape>

中央の色をずらして、右のグラデーションを実現できるかと思います。答えはノーだと思いますが、誰かがこれを行う方法を発見したかどうかを確認したいと思います。ありがとう!

4

1 に答える 1

3

残念ながら、これは XML 宣言では実現できませんが、コードでは可能です。

簡単なコード サンプルを次に示します。

public class MyDrawing extends View 
{   
    private Paint mPaint;

    public MyDrawing(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

    public MyDrawing(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init();
    }

    public MyDrawing(Context context)
    {
        super(context);
        init();
    }

    private void init()
    {
        int [] colors = new int[] { 0xff0000ff, 0xff00ff00, 0xffff0000 };
        float [] positions = new float[] { 0.4f, 0.7f, 0.9f };

        RadialGradient gradient = new RadialGradient(50, 50, 50, colors, positions, TileMode.CLAMP);                
        mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setShader(gradient);
    }

    @Override
    protected void onDraw(Canvas canvas) 
    {           
        super.onDraw(canvas);                               

        canvas.drawCircle(circleX, circleY, circleRadius, mPaint);      
    }
}

次の 2 点に注意してください。

  1. 色配列では、アルファ (1 番目から chars) を指定する必要があります。私の例では、両方とも "ff" として指定しました。これは透明性がないことを意味します。アルファを指定しない場合、デフォルトで 0 になります。

  2. 位置配列は、グラデーション内の各色の位置または強度を指定します。これをいじって、探している結果を達成してください。

お役に立てれば :)

于 2013-10-07T02:05:18.873 に答える