我有以下代码和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和奇怪的相对定位所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)