【发布时间】:2016-01-05 19:42:52
【问题描述】:
我在`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
}
但是,第二种方法似乎不起作用,我的问题是为什么?
【问题讨论】:
-
在
onSizeChanged内调用mShader = new LinearGradient(0, 0, ... -
@pskink 哇...这很好用,谢谢。关于为什么它在第二种方法中不起作用的问题对我来说仍然是一个谜。 :)
-
因为
getHeight()返回 0 -
@pskink 永远猜不到!谢谢!
-
然后将其转换为答案?
标签: android performance opengl-es