【发布时间】:2016-01-27 20:17:44
【问题描述】:
所以我正在开发 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" />
【问题讨论】:
-
只是一个注释,
((Button)findViewById(R.id.btnPlay)).setOnClickListener(...可以简化为findViewById(R.id.btnPlay).setOnClickListener(...,setVisibility也一样 -
请定义
shake是什么。如果它从自定义 xml 资源加载,也将其添加到您的问题中 -
另外,在调用 startAnimation 之前设置你的 animationListener
-
是的,它来自自定义 xml 资源
-
也将此添加到您的问题中
标签: java android android-intent android-activity mobile