有人可以提供一个示例实现来旋转线程上的按钮吗?截至目前,我正在使用以下代码在UI线程上旋转我的按钮:
Animation ranim = (Animation) AnimationUtils.loadAnimation(getBaseContext(),
R.anim.rotation);
buttonRotate.setAnimation(ranim);
答案 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逻辑和动画都启动。通过这种方式,您可以使按钮的旋转方式与后台线程执行资源密集型操作相同 - 即同时进行。
只是为了好玩,您可能希望在后台任务完成之前禁止再次单击按钮。
很抱歉缺少代码,但这应该是非常直接的。