【发布时间】:2014-09-19 14:29:41
【问题描述】:
我创建了一个显示可绘制动画的 Imageview,这取决于用户是否单击按钮 1(第一个动画将显示在 Imageview 中),然后是按钮 2(第二个动画将显示在 ImageView 中)。我的主要问题是重复按钮,因为我希望它以一种方式工作,如果用户单击此重复按钮,则 ImageView 中当前显示/选择的动画将再次显示/动画(无论用户单击按钮 1 还是按钮 2 )。请看一下我的重复按钮代码,当我调试它时,调用这个类时我的应用程序会崩溃。非常感谢您的帮助!
这是我没有重复按钮的工作代码:
公共类 AnimatedImage 扩展 Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animatedimage);
//Button1
Button btn1 = (Button) findViewById(R.id.btn1animation);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ImageView displayimage = (ImageView) findViewById(R.id.imageViewsign1);
displayimage.setBackgroundResource(R.drawable.animation_1);
displayimage.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation = (AnimationDrawable) displayimage.getBackground
();
frameAnimation.stop();
frameAnimation.start();
}
});
}
});
//Button 2
Button btn2 = (Button) findViewById(R.id.btn2animation);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ImageView displayimage = (ImageView) findViewById(R.id.imageViewsign1);
displayimage.setBackgroundResource(R.drawable.animation_2);
displayimage.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation2 = (AnimationDrawable) displayimage.getBackground
();
frameAnimation2.stop();
frameAnimation2.start();
}
});
}
});
}}
这是导致我的应用崩溃的部分:
//SignRepeat
Button repeatBtn = (Button) findViewById(R.id.repeatbtn);
repeatBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ImageView repImage = (ImageView) findViewById(R.id.imageViewsign1);
if (repImage.equals(R.drawable.animation_1)) {
repImage.setBackgroundResource((R.drawable.animation_1));
repImage.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation3 = (AnimationDrawable) repImage.getBackground();
frameAnimation3.stop();
frameAnimation3.start(); }});
}else {
repImage.setBackgroundResource((R.drawable.animation_2));
repImage.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation = (AnimationDrawable) repImage.getBackground();
frameAnimation4.stop();
frameAnimation4.start(); }});
}
}
});
更新:
@Override
public void onClick(View v) {
final ImageView repImage = (ImageView) findViewById(R.id.imageViewsign1);
if (repImage.getTag().equals(R.drawable.animation_a)) {
repImage.setBackgroundResource((R.drawable.animation_a));
repImage.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation3 = (AnimationDrawable) repImage.getBackground();
frameAnimation3.stop();
frameAnimation3.start(); }});
}else if (repImage.getTag().equals(R.drawable.animation_b)){
repImage.setBackgroundResource((R.drawable.animation_b));
repImage.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation4 = (AnimationDrawable) repImage.getBackground();
frameAnimation4.stop();
frameAnimation4.start(); }});
}
else {
repImage.setImageResource(R.drawable.image);
Toast toast = Toast.makeText(getApplicationContext(), "Choose between button1 and button2",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.show();
}
【问题讨论】:
-
logcat 中的错误是什么?
-
第一行说:FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{}: java.lang.NullPointerException
标签: android animation imageview