单击鼠标时启动活动会使动画变慢

时间:2016-01-27 20:17:45

标签: java android android-intent android-activity mobile

所以我正在开发Android应用程序,其中我有一个主屏幕和另一个屏幕与应用程序的内容。在主屏幕上,我有一个按钮,用户将用户导航到内容屏幕(实际上它是图像视图,但用作按钮)。 单击此按钮时,应启动单击其自身的动画,然后启动内容屏幕的活动。 但实际上它的工作非常糟糕和缓慢,当我点击动画开始的按钮但它减慢(滞后)。我尝试将事件从点击更改为点击以及许多其他可能的解决方案,但都没有效果。 我试着评论" startActivity"方法和这个修复它,动画运行顺利。显然我需要startActivity方法,所以这里最好的方法是什么,我该如何解决这个问题。可以将startActivity放在不同的线程中,我不知道如何做到这一点

这是我的代码:

((Button)findViewById(R.id.btnPlay)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            //shake.reset();
            findViewById(R.id.btnPlay).startAnimation(shake);

            shake.setAnimationListener(new Animation.AnimationListener() {
                Intent i;

                @Override
                public void onAnimationStart(Animation animation) {
                    i = new Intent(v.getContext(), GameActivity.class);
                    startActivity(i);
                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    ((Button) findViewById(R.id.btnPlay)).setVisibility(View.INVISIBLE);
                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });
        }
    });

shake是从自定义xml文件加载的动画。我在内容屏幕上有相同的动画,它运行顺畅,当然没有startActivity。这是代码:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
    android:duration="70"
    android:fromDegrees="-5"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="5"
    android:repeatMode="reverse"
    android:interpolator="@android:anim/linear_interpolator"
    android:toDegrees="5" />
<translate
    android:fromXDelta="-10"
    android:toXDelta="10"
    android:repeatCount="5"
    android:repeatMode="reverse"
    android:interpolator="@android:anim/linear_interpolator"
    android:duration="70" />

1 个答案:

答案 0 :(得分:2)

在onAnimationEnd()

中移动这些代码行
i = new Intent(v.getContext(), GameActivity.class);
startActivity(i);

<强>更新

我刚试过这段代码,它对我很有用:

    Animation animation = AnimationUtils.loadAnimation(MyApplication.getAppContext(), R.anim.shake);

    public void onClick(View v) {
        if (v.getId() == R.id.btnPlay) {
            animation.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {

                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    Intent intent = new Intent(getActivity(), ArticleActivity.class);
                    startActivity(intent);
                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });
            v.startAnimation(animation);
        }
    }

如果活动在按钮动画开始时启动,则可能有太多事情(例如:按钮动画,执行活动生命周期方法,包括片段的生命周期方法,用于活动之间转换的动画)在主线程上执行=&gt;按钮动画可能会卡住(动画不会流畅)。