我是想通过一个Alpha动画的淡出效果,让一个ImageView控件消失。
然后监听这个动画,在动画结束的时候,彻底将ImageView这个控件删除。
可是只要调用了这句viewGroup.removeView(imageView),就出现空指针异,注释掉它就可以正常运行.
并且我通过调用viewGroup的indexOfChild方法,测试了一下viewGroup中的确包含imageView这个控件。
代码如下:
package mars.Animation_13;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity {
/** Called when the activity is first created. */
private ViewGroup viewGroup=null;
private Button bu_del=null;
private Button bu_add=null;
private ImageView imageView=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取相应的控件对象
viewGroup=(ViewGroup)findViewById(R.id.layout);
bu_del=(Button)findViewById(R.id.bu_del);
bu_add=(Button)findViewById(R.id.bu_add);
imageView=(ImageView)findViewById(R.id.imageView);
//给按钮加上监听器
bu_del.setOnClickListener(new delButtonListener());
}
/**
* 删除按钮监听器
* @author Luckiee
*
*/
class delButtonListener implements OnClickListener{
public void onClick(View v){
//创建一个AlphaAnimation动画效果
AlphaAnimation alpha=new AlphaAnimation(1.0f,0.0f);
alpha.setDuration(2000);
//给动画设置监听器
alpha.setAnimationListener(new delAnimationListener());
//启动动画效果
imageView.startAnimation(alpha);
}
}
/**
* 删除动画监听器
* @author Luckiee
*
*/
class delAnimationListener implements Animation.AnimationListener{ @Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
//当动画结束的时候,移除ImageView控件
viewGroup.removeView(imageView);
System.out.println("onAnimationEnd..........");
} @Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
System.out.println("onAnimationRepeat.........");
} @Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
System.out.println("onAnimationStart........");
}
}
}大家帮忙看看什么情况,谢谢
然后监听这个动画,在动画结束的时候,彻底将ImageView这个控件删除。
可是只要调用了这句viewGroup.removeView(imageView),就出现空指针异,注释掉它就可以正常运行.
并且我通过调用viewGroup的indexOfChild方法,测试了一下viewGroup中的确包含imageView这个控件。
代码如下:
package mars.Animation_13;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity {
/** Called when the activity is first created. */
private ViewGroup viewGroup=null;
private Button bu_del=null;
private Button bu_add=null;
private ImageView imageView=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取相应的控件对象
viewGroup=(ViewGroup)findViewById(R.id.layout);
bu_del=(Button)findViewById(R.id.bu_del);
bu_add=(Button)findViewById(R.id.bu_add);
imageView=(ImageView)findViewById(R.id.imageView);
//给按钮加上监听器
bu_del.setOnClickListener(new delButtonListener());
}
/**
* 删除按钮监听器
* @author Luckiee
*
*/
class delButtonListener implements OnClickListener{
public void onClick(View v){
//创建一个AlphaAnimation动画效果
AlphaAnimation alpha=new AlphaAnimation(1.0f,0.0f);
alpha.setDuration(2000);
//给动画设置监听器
alpha.setAnimationListener(new delAnimationListener());
//启动动画效果
imageView.startAnimation(alpha);
}
}
/**
* 删除动画监听器
* @author Luckiee
*
*/
class delAnimationListener implements Animation.AnimationListener{ @Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
//当动画结束的时候,移除ImageView控件
viewGroup.removeView(imageView);
System.out.println("onAnimationEnd..........");
} @Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
System.out.println("onAnimationRepeat.........");
} @Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
System.out.println("onAnimationStart........");
}
}
}大家帮忙看看什么情况,谢谢
解决方案 »
- ProgressDialog的问题,求解
- 通过webVIew加载uri打开另外一个程序
- 求助,Widget 显示不了
- Android里面android.provider.Telephony.SMS_RECEIVED这个怎么找不到啊?
- 如何获取当前运行的屏幕的activity的实例对象??
- Admob广告条在横屏下竖着放置如何做
- 打开串口JNI问题,打开老是失败,跪求高手指点。
- 如何傳遞實時影像(視頻)串流到伺服器
- 关于activity内存溢出OOM的奇怪问题。
- ImageIO.read(inputFile);一直报错
- 请问 google map Overlay中的draw方法
- LocationManager的getLastKnownLocation("gps")异常问题
viewGroup.removeView(imageView);在这句话之前把viewGroup和imageView都打出来看看是否有一个为空。
另外如果viewGroup中只有一个imageView的话,
那就使用viewGroup.removeAllView();直接清了。
后imageView对象被清空了,然而这个Animation是由imageView启动的,所以它会报异常。
但好像又说不过去,因为我这个调用是在onAnimationEnd中的。
按理说不会啊,我测试了程序的每一行,都可以正常输出测试信息。
//修改onAnimationEnd事件延时通知viewGroup
public void onAnimationEnd(Animation animation) {
System.out.println("onAnimationEnd..........");
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
}).start();
}
private Handler handler=new Handler(){
public void dispatchMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
//当动画结束的时候,移除ImageView控件
viewGroup.removeView(imageView);
break; default:
break;
}
};
};
2. 为什么一定要把imageView给删掉呢? imageView.setVisible(View.GONE); 不可以吗?
在删掉这个imageview
要等Animation结束一段时间之后才能执行这个删除操作,灰常感谢。
anim.setFillAfter(true);
anim.setFillBefore(false);