如何在不阻塞主线程的情况下获得平滑动画?

时间:2012-07-10 14:47:16

标签: android animation asynchronous android-asynctask surfaceview

基本上,在我的活动中,有两个竞争,一个是动画的表面视图,另一个是带动画的按钮。

最初我在表面视图中创建了一个异步任务,并在'onprogressupdate'方法中“绘制”了它。根据我的理解,这就是它的意图。

然而,每当我按下按钮动画时,曲面视图就会停止,好像按钮的动画正在停止曲面视图的动画,这似乎是合乎逻辑的。

为了克服这个问题,我把'draw'放回'背景中运行'。我觉得这显然是错的。有没有办法可以运行这两个动画而不会相互阻挡?

1 个答案:

答案 0 :(得分:1)

您不应该从UI线程外部访问Android UI工具包。如果您想直接从UI thrad外部操作View,则应使用View.post(Runnable)。例如,

public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {
            mButton.post(new Runnable() {
                public void run() {
                    // do something here
                }
            });
        }
    }).start();
}