對於我的活動我使用3個自定義視圖堆疊。 下面的一個是SurfaceView全屏,中間的一個是從GridView派生的,並覆蓋onDraw以添加自定義圖形。無效()自定義視圖不會導致onDraw(Canvas c)被調用
最上面的一個直接來自View,位於屏幕的一個角落,並作爲一個旋鈕來控制其他兩個視圖(這是有問題的視圖)。
到自定義動畫添加到該視圖中,我使用這種模式:
public class StubKnobView extends View{
private Drawable knob;
private Point knobPos;
private float rotation;
private boolean needsToMove;
public void moveKnob(){
/* ...various calculations... */
this.needsToMove=true;
invalidate(); //to notify the intention to start animation
}
private void updateAnimation(){
/* ........... */
this.needsToMove= !animationComplete;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
int saveCount=canvas.getSaveCount();
canvas.save();
canvas.rotate(this.rotation, this.knobPos.x, this.knobPos.y);
this.knob.draw(canvas);
canvas.restoreToCount(saveCount);
if(this.needsToMove){
updateAnimation();
}
}
}
理想地,如果存在待決的動畫,每個繪圖循環的視圖應該自動無效之後。
現在,這不起作用,強制動畫我必須觸摸屏幕,導致onDraw循環。 使用開發工具的「顯示屏更新」我發現沒有屏幕無效/更新週期發生,除了當我點擊屏幕。 指定髒rect也沒有效果。
那麼,任何想法在哪裏看看知道爲什麼這種無效/繪製循環沒有按照預期的方式工作?
最後我用的解決方案與此類似 – andijcr