Android 如何停止此动画?
我创建了一个从点击按钮开始的彩色背景动画(它一次又一次地平滑地改变背景色)我的问题是无法停止动画(如果再次单击按钮,则会提高动画速度)。我已经尝试创建了一个while循环,但是动画不再工作了。我的目标是,如果我按下图像Btn,动画就会开始,如果我再次按下它,动画就会停止 代码:Android 如何停止此动画?,android,animation,android-animation,imagebutton,runnable,Android,Animation,Android Animation,Imagebutton,Runnable,我创建了一个从点击按钮开始的彩色背景动画(它一次又一次地平滑地改变背景色)我的问题是无法停止动画(如果再次单击按钮,则会提高动画速度)。我已经尝试创建了一个while循环,但是动画不再工作了。我的目标是,如果我按下图像Btn,动画就会开始,如果我再次按下它,动画就会停止 代码: imageButton_info.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(
imageButton_info.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
// Handler and runnable to run the animation in devices sdk below honeycomb.
final Handler handler = new Handler();
Runnable ChangeBackgroundRunnable = new Runnable() {
@Override
public void run() {
number++;
float[] hsvColor = {0, 1, 1};
hsvColor[0] = 360f * number / 100;
color.setBackgroundColor(Color.HSVToColor(hsvColor));
handler.postDelayed(this, 80);
if (number >=100)
number = 1;
}
};
number = 0;
handler.removeCallbacks(ChangeBackgroundRunnable);
handler.postDelayed(ChangeBackgroundRunnable, 0);
}
});
再次查看代码,removeCallbacks
方法正在传入一个尚未运行的Runnable
实例
您需要将Runnable
的实例存储在单击侦听器的外部。我已经举出一个简单的例子来说明我的想法:
public class MainActivity extends AppCompatActivity {
TextView textView;
Button startBtn;
int counter = 0;
boolean running = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.tvCounter);
startBtn = (Button) findViewById(R.id.startBtn);
final Handler counterHandler = new Handler(Looper.getMainLooper()); //Just to be specific
final Runnable myRunnable = new Runnable() {
@Override
public void run() {
textView.setText(String.format("Count is %s", counter ++));
counterHandler.postDelayed(this, 100);
}
};
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(running) {
counterHandler.removeCallbacks(myRunnable);
running = false;
} else {
counterHandler.post(myRunnable);
running = true;
}
}
});
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="example.com.test.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvCounter"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:id="@+id/startBtn" android:text="Start Stop Button"/>
</RelativeLayout>
改用ValueAnimator但创建的程序几乎可以完美运行,应该有办法阻止它?检查这个旧的stackoverflow。思考如何扩展此处提出的解决方案:非常感谢您的回答,您的建议非常有效!