我是想通过一个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........");
}
}
}大家帮忙看看什么情况,谢谢
解决方案 »
- android自定义桌面:隐藏掉几个应用,且不能退出当前自定义桌面
- 百度地图android版默认设置存在一个地图缓存的bug.
- 两个Activity之间怎么传递List<Map<String,Object>>型数据,谢谢
- 你运行的程序意外停止 logcat显示如下 是什么问题?
- android 锁屏 监听
- 知道图片名字怎么获得图片
- 求助:各位大神有没有自己制作好的引用百度离线地图的应用代码
- 使用刷机软件后遗症。
- sos 关于listview的问题求助
- 运行chromecast实例出错
- 请问 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);