gpt4 book ai didi

Android LinearGradient 和奇怪的相对定位

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:45 26 4
gpt4 key购买 nike

我有以下带有 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);

}
}

在布局中,这会产生以下内容,这几乎是正确的:

http://i.stack.imgur.com/Pqbx1.png

但是,当其他东西改变了我 View 的 Y 位置时,它就出错了:

http://i.stack.imgur.com/bnyeU.png

LinearGradient 使用相对于最顶层 View (即对话框)的绝对位置。我这辈子都想不通 - 为什么?

谢谢!

罗布

最佳答案

我遇到了同样的问题。着色器中的位置不是形状而是相对于 Canvas 。

因此,您需要始终围绕原点在 Canvas 上绘制形状,并将 Canvas 平移到所需位置。

例如:

不要:

canvas.drawCircle(posx, posy, radius);

做:

canvas.save();
canvas.translate(posx, posy);
canvas.drawCircle(0,0,radius);
canvas.restore();

希望对您有所帮助! ;)

关于Android LinearGradient 和奇怪的相对定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com