Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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 在函数中使用animatorSet.playTogether(集合<;Animator>;项)_Android_Multithreading_Android Layout_Android Animation - Fatal编程技术网

Android 在函数中使用animatorSet.playTogether(集合<;Animator>;项)

Android 在函数中使用animatorSet.playTogether(集合<;Animator>;项),android,multithreading,android-layout,android-animation,Android,Multithreading,Android Layout,Android Animation,我创建了一个获取字符串的函数。然后,我启动一个循环,该循环遍历字符串中的字符,然后根据带有开关的字符进行操作(每个字符有不同的大小写) 在每种情况下,我都希望创建一个具有非常特定参数的ImageView:resource、pivotX/Y、边距等(所有情况都可以进行功能化,但有点复杂)。 然后我使用runOnUiThread将其添加到relativeLayout 然后,我创建ImageView(属性动画)的特定动画师,并将其添加到名为“animators”的全局ArrayList中 ^这是在退出

我创建了一个获取字符串的函数。然后,我启动一个循环,该循环遍历字符串中的字符,然后根据带有开关的字符进行操作(每个字符有不同的大小写)

在每种情况下,我都希望创建一个具有非常特定参数的ImageView:resource、pivotX/Y、边距等(所有情况都可以进行功能化,但有点复杂)。 然后我使用runOnUiThread将其添加到relativeLayout

然后,我创建ImageView(属性动画)的特定动画师,并将其添加到名为“animators”的全局ArrayList中

^这是在退出For循环时调用的,据我所知,应该同时在指定的ImageView上播放我给出的所有动画*动画师集是全局的

当我给函数赋予字符串“AE”并运行代码时,它成功地创建了caseA的ImageView,但没有播放其动画。此外,它不会创建caseE ImageView,也不会播放其动画。

*在TimerTask中调用该函数(似乎不是问题)


我们将非常感谢您为我们提供的任何帮助,让我们的工作更有效

为什么不使用ViewPropertyAnimator?这是一个简单的af。当我调用函数时,字符串指定了我想要一起播放的动画。这些动画每次都不一样,每个字符串都有不同数量的动画在不同的视图上运行,我需要一起播放。通过快速阅读:我确实看到使用ViewPropertyAnimator比使用六个对象的Animator更容易,但这不是问题所在。你的意思是,在你的AE示例中,每个角色将位于单独的ImageView中,并且每个角色将具有不同的Animator对象?这些animator对象都添加到animatorSet ArrayList中,对吗?我也做了类似的事情,但使用了ViewPropertyImator。我很肯定VPA会很好地完成你的工作。此外,您可能需要使用OnGlobalLayoutListener,然后在视图布局完成后对动画制作者调用start()。这可能是因为你们的动画师在你们的视图布局之前就开始工作了。我知道你们建议在每种情况下,我都创建一个ImageView。那我就对了:blimpA.animate().translationX(值).translationY(值);但我也希望动画一起运行。还有一个主要问题是,它甚至没有将我在“E”案例中创建的ImageView添加到布局中。我已经检查过了,这并不是playTogether方法不起作用的原因,因为当我仅尝试为UI上出现的案例“A”的ImageView设置动画时,它仍然不会播放动画。调用animator1.start()然后调用animator2.start()将使animator1和animator2同时运行,同时使用ViewPropertyAnimator。但好吧,我们暂时把它放在一边。您的文本视图没有设置动画的原因很可能是因为您在文本视图显示在屏幕上之前调用了
playthouse()
方法。您可能需要在A视图中附加一个
OnGlobalLayoutListener
接口,并在接口的
onGlobalLayout()
方法中调用startGether()方法。这将确保在视图布局完成后,尝试对视图进行动画设置
public void setBlimps(String locations){
    final RelativeLayout game = (RelativeLayout) findViewById(R.id.relativeLayout);
    // getting the layout
    for(int i = 0; i < locations.length(); i++){
        switch(locations.charAt(i)){
            case 'A':
                final ImageView blimpA = new ImageView(this);
                blimpA.setImageResource(R.drawable.explosion);
                RelativeLayout.LayoutParams layoutParamsA = new RelativeLayout.LayoutParams(150,150);
                layoutParamsA.setMargins(200, 200, 200, 200);
                blimpA.setLayoutParams(layoutParamsA);
                blimpA.setPivotX(150);
                blimpA.setPivotY(150);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        game.addView(blimpA);
                    }
                });
                final ObjectAnimator animA1 = ObjectAnimator.ofFloat(blimpA,"translationX",0,-200).setDuration(1000);
                final ObjectAnimator animA2 = ObjectAnimator.ofFloat(blimpA,"translationY",0,-200).setDuration(1000);
                animators.add(animA1);
                animators.add(animA2);
                break;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            animatorSet.playTogether(animators);// this doesn't work
        }
    });