Android:线程上的旋转按钮

时间:2012-06-20 21:42:39

标签: android multithreading handler runnable

有人可以提供一个示例实现来旋转线程上的按钮吗?截至目前,我正在使用以下代码在UI线程上旋转我的按钮:

Animation ranim = (Animation) AnimationUtils.loadAnimation(getBaseContext(),
                    R.anim.rotation);
                buttonRotate.setAnimation(ranim);

3 个答案:

答案 0 :(得分:0)

在您的UI线程定义

Handler mainHandler = new Handler();

然后在你的线程中,使用:

mainHandler.post(new Runnable()
{
    public void run()
    {
       //your piece of code
    }
});

到目前为止,这在几个案例中对我很有帮助,希望它也适合你! :d

编辑:

mainHandler.post(new Runnable()
{
    public void run()
    {
            while(someBoolean==true)
            {
                //your piece of code
            }
    }
});

如果你在你的类中定义'someBoolean',就像你对处理程序一样,线程应该得到它,我相信。
这样,在处理完数据之后,只需将someBoolean设置为false,旋转就会停止。

答案 1 :(得分:0)

以下应该适合你。

Thread thread = new Thread() 
{ 
    @Override 
    public void run() { 
        try { 
                Animation ranim = (Animation) AnimationUtils.loadAnimation(getBaseContext(), 
                R.anim.rotation); 
                buttonRotate.setAnimation(ranim); 
        } catch (InterruptedException e) { 
            e.printStackTrace(); 
        } 
    } 
}; 

thread.start(); 

你可能最终必须创建一个AsyncTask,它可以独立运行而不会打扰UI Thread

答案 2 :(得分:0)

不幸的是我目前无法访问我的IDE,因此我将列出适合您的步骤,而不是将错误代码放在此处。

1)在扩展Activity的同一个类中实现“AnimationListener”。 2)在按钮上设置单击侦听器。 3)创建一个AsyncTask类。 4)覆盖doInBackground(AsyncTask)并将资源密集型逻辑放在那里。 5)在onAnimationStart(AnimationListener)中,实现调用AsyncTask的逻辑,即new MyTask()。execute(); 6)定义动画并将其设置为按钮。

这是它应该如何:你单击按钮,调用onAnimationStart,你的AsyncTask逻辑和动画都启动。通过这种方式,您可以使按钮的旋转方式与后台线程执行资源密集型操作相同 - 即同时进行。

只是为了好玩,您可能希望在后台任务完成之前禁止再次单击按钮。

很抱歉缺少代码,但这应该是非常直接的。