更新
我的小橱窗存储在Bitbucket上。
https://bitbucket.org/solvapps/animationtest
我有一项活动,里面有视野。Contentview设置为此视图。
public class MainActivity extends AppCompatActivity {
private MyView myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView = new MyView(this);
setContentView(myView);
startMovie();
}
public void startMovie(){
MovieTask movieTask = new MovieTask(myView, this);
movieTask.doInBackground(null);
}
}MovieTask是一个同步任务,并定期刷新视图。但是,失效()并不刷新视图。
public class MovieTask extends AsyncTask<String, String, String> {
MyView drawingView;
MainActivity mainActivity;
public MovieTask(MyView view, MainActivity mainActivity){
this.mainActivity = mainActivity;
this.drawingView =view;
}
@Override
protected String doInBackground(String... strings) {
for(int i=20;i<100;i++){
drawingView.myBall.goTo(i,i);
publishProgress();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
mainActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.v("DEBUG_DRAW","in onProgressUpdate()");
drawingView.invalidate();
}
});
}
}有人能帮忙吗?
发布于 2018-03-16 09:10:36
有两种可能的情况,首先如文档所述
无效使整个视图无效。如果视图是可见的,那么onDraw(android.graphics.Canvas)将在将来的某个时候被调用。
因此,尝试在onResume中运行您的代码,可能还看不到View。
其次,View#invalidate告诉系统在主UI线程空闲时重新绘制视图。也就是说,在所有其他立即完成的工作完成后,调用无效计划您的视图将被重新绘制。
如果希望定期更新视图,请使用Handler#postDelay或在单独的线程中运行它,并使用View#postInvalidate更新View并触发对onDraw的调用。
https://stackoverflow.com/questions/49316619
复制相似问题