У меня есть следующий код с LinearGradient, который выглядит так же, как и все остальные примеры.
public class CustomColourBar extends View
{
public CustomColourBar( Context context, AttributeSet attribs )
{
super( context, attribs );
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(170, 40);
}
@Override
protected synchronized void onDraw( Canvas canvas )
{
int height = this.getMeasuredHeight();
int width = this.getMeasuredWidth();
LinearGradient shader = new LinearGradient(
0, 0, 0, height,
Color.RED, Color.YELLOW,
Shader.TileMode.CLAMP );
Paint paint = new Paint();
paint.setShader(shader);
RectF fgRect = new RectF( 0, 0, width, height);
canvas.drawRoundRect(fgRect, 7f, 7f, paint);
}
}
В макете это выдает следующее, что примерно правильно:
Однако, когда другие вещи изменяют позицию Y моего взгляда, это идет не так:
LinearGradient использует абсолютную позицию относительно самого верхнего вида (т. Е. Диалогового окна). Я не могу на всю жизнь сообразить - почему?
Спасибо!
Rob