【发布时间】:2011-10-26 16:42:43
【问题描述】:
对于我的活动,我使用堆叠的 3 个自定义视图。 下一个是SurfaceView全屏,中一个是从GridView派生的,覆盖onDraw来添加自定义图形。
顶部的一个直接从 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 循环。 使用开发工具的“显示屏幕更新”,我看到没有屏幕无效/更新周期发生,除了当我单击屏幕时。 指定脏矩形也没有效果。
那么,有什么想法可以去哪里了解为什么这个无效/绘制循环不能按预期的方式工作?
【问题讨论】: