1

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

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

3 回答 3

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,旋转就会停止。

于 2012-06-20T21:49:47.910 回答
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.

于 2012-06-20T21:50:04.317 回答
0

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

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

它应该是这样的:你点击按钮,onAnimationStart 被调用,你的 AsyncTask 逻辑和动画都开始了。这样,您可以让您的按钮在您的后台线程正在执行资源密集型操作的同时旋转 - 即同时进行。

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

抱歉缺少代码,但这应该从这里开始。

于 2012-06-20T22:33:15.737 回答