我在`View.onDraw(Canvas canvas)中遇到过这种奇怪的行为。
当我执行以下代码时,我的着色器按预期工作:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mGraphPaint.setShader(new LinearGradient(0, 0, 0, getHeight(), 0xFFEEB422, 0x00EEB422,
Shader.TileMode.CLAMP));
canvas.drawPath(path, mGraphPaint);
// Rest of code
}
但请注意,每次调用都会创建LinearGradient的对象。
显而易见的解决方案:
private LinearGradient mShader = new LinearGradient(0, 0, 0, getHeight(), 0xFFEEB422, 0x00EEB422,
Shader.TileMode.CLAMP);
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mGraphPaint.setShader(mShader);
canvas.drawPath(path, mGraphPaint);
// Rest of code
}
然而,第二种方法似乎不起作用,我的问题是为什么?
答案 0 :(得分:1)
好的,将评论升华为答案:
方法getHeight()
在第一次调用onDraw(Canvas canvas)
之前返回0,因此LinearGradient
对象创建为0高度 - 因此它不会出现。