我有一个LinearGradient的代码,它看起来与其他所有示例相同。Android 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使用相对于最顶层视图的绝对位置(即对话)。我不能为我的生活弄清楚 - 为什么?
谢谢!
罗布
我已经放弃了这个,现在使用ninepatch图形(它有一个渐变)。我的图形是白色的,所以我还借用了一些代码来做一个“着色”过滤器,它给了我色彩控制。 我发现所有渐变(径向和我忘记的)以相同的方式表现,我可以看到没有活动/布局不可知的方式来使它们工作。即使检索和使用屏幕上的位置也没有帮助 - 在一个配置上工作得很好,但在其他配置上工作得很好。 – 2011-02-26 22:29:57