我有以下代码,我正在尝试实现翻转卡动画。当我点击第二张图像时,它会翻转并突然转动(很难解释,它只是快速翻转)。此外,当我单击第二个imageview时,第一个imageview上的动画开始。你能建议我怎么解决这个问题吗?我只想要在点击该特定卡时启动卡上的动画。
package com.example.twocards;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.app.Activity;
public class MainActivity extends Activity implements OnClickListener,
AnimationListener {
private Animation animation1;
private Animation animation2;
private boolean isBackOfCardShowing = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
animation1 = AnimationUtils.loadAnimation(this, R.anim.to_middle);
animation1.setAnimationListener(this);
animation2 = AnimationUtils.loadAnimation(this, R.anim.from_middle);
animation2.setAnimationListener(this);
findViewById(R.id.imageView2).setOnClickListener(this);
findViewById(R.id.imageView1).setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.imageView1) {
v.setEnabled(false);
((ImageView)findViewById(R.id.imageView1)).clearAnimation();
((ImageView)findViewById(R.id.imageView1)).setAnimation(animation1);
((ImageView)findViewById(R.id.imageView1)).startAnimation(animation1);
}else if (v.getId() == R.id.imageView2) {
v.setEnabled(false);
((ImageView)findViewById(R.id.imageView2)).clearAnimation();
((ImageView)findViewById(R.id.imageView2)).setAnimation(animation1);
((ImageView)findViewById(R.id.imageView2)).startAnimation(animation1);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (animation==animation1) {
if (isBackOfCardShowing) {
((ImageView)findViewById(R.id.imageView1)).setImageResource(R.drawable.strategy);
} else {
((ImageView)findViewById(R.id.imageView1)).setImageResource(R.drawable.memory);
}
((ImageView)findViewById(R.id.imageView1)).clearAnimation();
((ImageView)findViewById(R.id.imageView1)).setAnimation(animation2);
((ImageView)findViewById(R.id.imageView1)).startAnimation(animation2);
} else {
isBackOfCardShowing=!isBackOfCardShowing;
findViewById(R.id.imageView1).setEnabled(true);
}
}
public void onAnimationEnd1(Animation animation) {
if (animation==animation1) {
if (isBackOfCardShowing) {
((ImageView)findViewById(R.id.imageView2)).setImageResource(R.drawable.memory);
} else {
((ImageView)findViewById(R.id.imageView2)).setImageResource(R.drawable.strategy);
}
((ImageView)findViewById(R.id.imageView2)).clearAnimation();
((ImageView)findViewById(R.id.imageView2)).setAnimation(animation2);
((ImageView)findViewById(R.id.imageView2)).startAnimation(animation2);
} else {
isBackOfCardShowing=!isBackOfCardShowing;
findViewById(R.id.imageView2).setEnabled(true);
}
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:1)
onClick1
属性在xml上设置,否则 android:onClick
不是正确的签名。如果是后者,那么你必须删除,一个在
findViewById(R.id.imageView2).setOnClickListener(this);
findViewById(R.id.imageView1).setOnClickListener(this);
如果不是这种情况,则仅调用onClick(View view)
,您必须区分单击的视图。一种方法是将视图提供的id作为参数进行比较:
@Override
public void onClick(View v) {
if (v.getId() == R.id.imageView1) {
v.setEnabled(false);
((ImageView)findViewById(R.id.imageView1)).clearAnimation();
((ImageView)findViewById(R.id.imageView1)).setAnimation(animation1);
((ImageView)findViewById(R.id.imageView1)).startAnimation(animation1);
} else if (v.getId() == R.id.imageView2) {
}
}