Ответ 1
К сожалению, этого не может быть достигнуто посредством 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);
}
}
Две вещи, на которые вы должны обратить внимание:
-
В массиве цветов вы должны указать альфа (1-й на символы). В моем примере я указал как "ff", что означает отсутствие прозрачности. Если вы не укажете альфу, по умолчанию будет 0.
-
Аргумент позиций определяет положение или силу каждого цвета в градиенте. Играйте с этим, чтобы достичь результата, который вы ищете.
Надеюсь, что это поможет:)