Java 安卓onClick启动';s两个动画,应该只启动一个
根据我首先单击的动画,第二个动画将始终设置第一个动画。我不知道我做错了什么Java 安卓onClick启动';s两个动画,应该只启动一个,java,android,Java,Android,根据我首先单击的动画,第二个动画将始终设置第一个动画。我不知道我做错了什么 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.TranslateAnimation; import android.widget.Button; import an
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class Test extends Activity {
ImageView img_left;
ImageView img_right;
Button left;
Button right;
TranslateAnimation moveup;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
moveup = new TranslateAnimation(0, 0, 0, -900);
moveup.setDuration(2000);
moveup.setFillAfter(true);
left = (Button) findViewById(R.id.left);
right = (Button) findViewById(R.id.right);
img_left = (ImageView) findViewById(R.id.image_left);
img_right = (ImageView) findViewById(R.id.image_right);
right.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
img_right.startAnimation(moveup);
Toast.makeText(getApplicationContext(), "right", Toast.LENGTH_LONG).show();
}
});
left.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
img_left.startAnimation(moveup);
Toast.makeText(getApplicationContext(), "left", Toast.LENGTH_LONG).show();
}
});
}
}
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
tools:context=".First" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" >
<Button
android:id="@+id/left"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#0000EE"
android:text="" />
<Button
android:id="@+id/right"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#0000EE"
android:text="" />
</LinearLayout>
<ImageView
android:id="@+id/image_left"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:src="@drawable/cue1" />
<ImageView
android:id="@+id/image_right"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@drawable/cue2" />
</RelativeLayout>
创建两个具有相同属性的不同
动画
对象,一个用于左侧,一个用于右侧,或者在启动另一个视图之前调用setAnimation(null)
。换言之:
right.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
img_left.setAnimation(null);
img_right.startAnimation(moveup);
Toast.makeText(getApplicationContext(), "right", Toast.LENGTH_LONG).show();
}
});
left.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
img_right.setAnimation(null);
img_left.startAnimation(moveup);
Toast.makeText(getApplicationContext(), "left", Toast.LENGTH_LONG).show();
}
});
Animation
对象在调用setAnimation()
或startAnimation()
时附加到其视图。通过启动附加到同一动画
实例的两个视图,动画在运行时可能会影响两个视图的绘图。视图在无效时只关注动画的当前状态,因此这并不一定意味着它们将始终一起设置动画。但是,如果您的代码在动画运行时遇到两个ImageView
实例都无效的情况,它们都会响应转换。尝试使用>>new View.OnClickListener()
代替new OnClickListener()
显示布局xml。您可以将ID设置为相同的值。经过三次检查,它们都设置正确,但我还是要添加它。也许我只是缺少了一些东西。moveup.setAnimationListener(null)代码>不起作用。不过,创建两个动画对象确实可以。我觉得两个物体是不必要的,或者我的思维过程是不正确的?如果我在做一个游戏,我想让子弹在同一个动画中飞行呢。我会为每个视图创建一个新的动画对象,还是会影响带有动画的视图,而不会影响已放入动画中的其他视图?感谢您没有清除侦听器…动画;我用一个例子更新了答案。您一次只希望将该动画附加到任何一个视图。为每个视图创建一个视图并不是最糟糕的事情,它们不是重量级对象,如果它们都同时运行,您肯定需要这样做,因为它们将位于动画中的不同点。动画
对象保持动画距离完成多远以及这对转换意味着什么的状态。诚然,这有点尴尬,但这就是为什么安卓3.0+不再使用这个动画系统的原因。等等,安卓3.0不再使用这个了。。。如果我是专门为3.0及更高版本开发的呢?那么您最好转向更新的属性动画系统。较旧的系统仍然可以工作,但属性动画的整体API要好得多: