Android LinearGradient和奇怪的相对定位

Android LinearGradient和奇怪的相对定位,第1张

概述我有以下代码和LinearGradient,它与其他所有示例看起来非常相似.publicclassCustomColourBarextendsView{publicCustomColourBar(Contextcontext,AttributeSetattribs){super(context,attribs);}@OverrideprotectedvoidonMeasure(intwidthMeasu

我有以下代码和linearGradIEnt,它与其他所有示例看起来非常相似.

public class CustomColourbar extends VIEw{public CustomColourbar( Context context, AttributeSet attribs ){    super( context, attribs );}    @OverrIDeprotected voID onMeasure(int wIDthMeasureSpec, int heightmeasureSpec){    setMeasuredDimension(170, 40);}@OverrIDeprotected 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使用相对于最顶层视图(即对话框)的绝对位置.我不能为我的生活弄明白 – 为什么?

谢谢!

解决方法:

我有同样的问题.着色器中的位置不是形状而是画布相对.

因此,您需要在画布上始终围绕原点绘制形状,并将画布转换为所需位置.

例如:

不要:

canvas.drawCircle(posx, posy, radius);

做:

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

希望它有所帮助! 总结

以上是内存溢出为你收集整理的Android LinearGradient和奇怪的相对定位全部内容,希望文章能够帮你解决Android LinearGradient和奇怪的相对定位所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存