Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何停止此动画?_Android_Animation_Android Animation_Imagebutton_Runnable - Fatal编程技术网

Android 如何停止此动画?

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(

我创建了一个从点击按钮开始的彩色背景动画(它一次又一次地平滑地改变背景色)我的问题是无法停止动画(如果再次单击按钮,则会提高动画速度)。我已经尝试创建了一个while循环,但是动画不再工作了。我的目标是,如果我按下图像Btn,动画就会开始,如果我再次按下它,动画就会停止

代码:

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。思考如何扩展此处提出的解决方案:非常感谢您的回答,您的建议非常有效!