0
我在`View.onDraw(Canvas canvas)中遇到過這種奇怪的行爲。爲什麼着色器不出現在onDraw中?
當我執行下面的代碼我着色器按預期工作:但是
@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
}
然而,第二種方法似乎沒有工作,我的問題是爲什麼呢?
調用'mShader = new LinearGradient(0,0,...''onSizeChanged'內部 – pskink
@pskink WOW ...這個效果很好,謝謝。關於_Why_這個問題在第二種方法中無效對我來說還是一個謎。:) – NikolA
因爲'getHeight()'返回0 – pskink