Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading_Android Animation_Runnable_Android Handler - Fatal编程技术网

Android 在一个处理程序中可运行多个,以管理动画

Android 在一个处理程序中可运行多个,以管理动画,android,multithreading,android-animation,runnable,android-handler,Android,Multithreading,Android Animation,Runnable,Android Handler,我有三个可运行的三个动画,我想以一种良好的方式管理它,以避免任何性能问题 从我所读到的内容来看,创建一个处理程序并发送一条不同的消息用于不同的操作可能是一个解决方案:handler.sendEmptyMessage(msg) 基本上,在我的代码中,我点击一个按钮,通过一个新的处理程序触发我的3个动画 解决方案一(S1)单击按钮侦听器: 解决方案二(S2)onClick按钮侦听器: S1和S2正在工作。我的两个动画都被触发。但有时似乎有点慢。大多数时候都可以,但有时会不平滑,或者不是所有的动画都被

我有三个可运行的三个动画,我想以一种良好的方式管理它,以避免任何性能问题

从我所读到的内容来看,创建一个处理程序并发送一条不同的消息用于不同的操作可能是一个解决方案:
handler.sendEmptyMessage(msg)

基本上,在我的代码中,我点击一个按钮,通过一个新的处理程序触发我的3个动画

解决方案一(S1)单击按钮侦听器:

解决方案二(S2)onClick按钮侦听器:

S1和S2正在工作。我的两个动画都被触发。但有时似乎有点慢。大多数时候都可以,但有时会不平滑,或者不是所有的动画都被触发


可能是因为我没有在最后销毁runnable/handler,但不确定在这种情况下是否需要它。在这种情况下,最佳做法是什么?有比其他解决方案更好的解决方案吗?

最佳做法?使用
ValueAnimator
/
ObjectAnimator
@pskink我来看看这些,谢谢。我只是使用了一个经典的动画对象,我将它设置为3个带平移的ViewFlipper,以模拟老虎机的垂直滚动。在这种情况下,您甚至可以使用
ViewPropertyAnimator
translation*
方法中的一种方法最佳做法?使用
ValueAnimator
/
ObjectAnimator
@pskink我来看看这些,谢谢。我只是使用了一个经典的动画对象,我将其设置为3个带平移的ViewFlipper,以模拟老虎机的垂直滚动。在这种情况下,您甚至可以使用
ViewPropertyAnimator
translation*
方法之一
    Handler h = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            if (msg.what == 1) {
                postDelayed(rColumnOne, mSpeedc1);
            } else if (msg.what == 2) {
                postDelayed( rColumnTwo, mSpeedc1);
            } else if (msg.what == 3) {
                postDelayed( rColumnThree, mSpeedc1);
            }
        }
    };

    h.sendEmptyMessage(1);
    h.sendEmptyMessage(2);
    h.sendEmptyMessage(3);
Handler handler = new Handler();
handler.postDelayed( rColumnOne, mSpeedc1);
handler.postDelayed( rColumnTwo, mSpeedc2);
handler.postDelayed( rColumnThree, mSpeedc3);