这些代码和线性梯度: 和其他所有例子都很相似。
publicclasscustomcolourbarextendsview
{
publiccustomcolourbar (上下文上下文,AttributeSet attribs ) )。
{
super(context,attribs );
}
@Override
protectedvoidonmeasure (intwidthmeasurespec,int heightMeasureSpec ) )。
{
setmeasureddimension(170、40;
}
@Override
protectedsynchronizedvoidondraw (canvas canvas ) )。
{
int height=this.getmeasuredheight (;
int width=this.getMeasuredWidth (;
lineargradientshader=newlineargradient (
0,0,0,height,
Color.RED,Color.YELLOW,
Shader.TileMode.CLAMP;
Paint paint=new Paint (;
paint.setshader(shader );
rectffgrect=newrectf (0,0,width,height );
canvas.DrawRoundrect(fgrect、7f、7f、paint );
}
}
在布局中,这将导致: 这几乎是正确的。
但是,如果其他事情改变了我视点的y位置,那就错了:
线性梯度使用相对于顶级视图或对话框的绝对位置。 为了我的生活,我不能理解。 为什么?
谢谢你!
抢
解决方法:
有同样的问题。 着色器中的位置是画布相对的,而不是形状。
因此,必须始终在画布上围绕原点绘制形状,并将画布转换为所需的位置。
例如:
不:
Canvas.DrawCircle(POSX,posy,radius );
做:
canvas.save (;
canvas.translate(POSX,posy );
canvas.draw circle (0,0,radius );
canvas.restore (;
我希望它有用!
标签: android,layout,gradient
资料来源: https://codeday.me/bug/2019 07 26/1543932.html