我有一个textview,我有很多按钮。其中一个按钮应该能够启动'动画',它不是动画的动画,它只需要使文本变为红色2秒,文本应该变为绿色2秒而不是再次变为红色。 .. - 其中一个按钮应该停止'动画'并将文本设置为白色 -one应该使文本返回1秒,而不是蓝色2秒再次返回黑色......
重点是用户可以随时按下按钮。
我想我应该使用Handler,但我不确定啪啪声,我不知道线程的停止应该是什么样子,我的意思是当我开始线程时,后来我应该告诉他停止...这样做的最佳方式是什么?
我总是用愚蠢的技巧来编写这种思想,我不知道这种模式是什么,这样做的正确方法是什么?
由于
这里有一些我如何做的代码,但我觉得这不是正确的方法
private boolean flagForStop=true;
private Handler handler1=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
flagForStop=false;
case 1:
flagForStop=true;
break;
case 2:
new Thread(){
public void run(){
while(true){
if(flagForStop)break;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//do something
}
}
}.start();
break;
default:
break;
}
}
};
并且比听众更喜欢 handler1.sendEmptyMessage(0);
答案 0 :(得分:0)
以下是我将如何做到的,它并不完美,但它适用于您上面提到的所有类型的动画。
首先创建一个名为 AnimStep 的类,其中包含两个字段:时间和颜色。构造函数是AnimStep(int time,String color)
然后创建一个名为 AnimSequence 的类,其中包含AnimStep对象的数组。您将使用this.getStep(index)获得特定步骤。
例如 AnimSequence 为“粉红色2秒然后品红色3秒然后黑色永远”将包含以下AnimSteps数组:{new AnimStep(0,“pink”),new AnimStep(2, “magenta”),新的AnimStep(5,“黑色”)}
然后创建一个名为动画的类,它在一个单独的线程中永久运行并定期唤醒(例如每100毫秒)。这个类有三个字段:
单击按钮时,将AnimSequence传递给Animation。这将this.sequence设置为给定的AnimSequence,this.startTime =,this.step = 1.它还将文本的颜色设置为AnimSequence中第一个AnimStep的颜色。
现在每次动画唤醒时,都会执行以下操作:
if (this.step >= this.sequence.size()) return // do nothing
currentStep = this.sequence.getStep(this.step)
elapsedTime = <current time stamp for now> - this.time
if (elapsedTime >= currentStep.time) {
this.step++
yourtext.color = currentStep.color
}