所以我正在开发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" />
答案 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;按钮动画可能会卡住(动画不会流畅)。