ViewGroup是一个可以包含View子类的一个容器,从SDK文档上可以看出他是Layout和一些View的父类,我们可以通过ViewGroup对Layout进行添加删除控件。下面来看下如何通过ViewGroup用动画效果添加删除一张图片,
布局文件viewgroup.xm 定义两个按钮和一张图片。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutId"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/add"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="添加图片"/>
<Button
android:id="@+id/delete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/add"
android:text="删除图片"/>
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
</RelativeLayout>
Activity文件
package com.example.animation;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.Button;
import android.widget.ImageView;
import com.example.widgetdemo.R;
public class AnimationViewGroup extends Activity {
private Button add = null;
private Button delete = null;
private ImageView image = null;
private ViewGroup viewGroup = null;
private boolean isExist = true; //如果为true说明图片存在,否则图片不存在
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.viewgroup);
add = (Button) findViewById(R.id.add);
delete = (Button) findViewById(R.id.delete);
image = (ImageView) findViewById(R.id.image);
viewGroup = (ViewGroup) findViewById(R.id.layoutId);
add.setOnClickListener(new addListener());
delete.setOnClickListener(new deleteListener());
}
/**
* 添加使用淡入效果
*
* @author Administrator
*
*/
private class addListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(!isExist){
AlphaAnimation alpha = new AlphaAnimation(0.0f, 1.0f);
alpha.setDuration(1000); // 设置动画效果持续时间
alpha.setStartOffset(500); // 设置动画500ms后开始
image.setImageResource(R.drawable.ic_launcher);
viewGroup.addView(image, new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
image.setAnimation(alpha);
isExist = true;
}
}
}
/**
* 删除使用淡出效果
*
* @author Administrator
*
*/
private class deleteListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(isExist){
AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f);
alpha.setDuration(1000); // 设置动画效果持续时间
alpha.setStartOffset(500); // 设置动画500ms后开始
alpha.setAnimationListener(new RemoveAnimationListener()); // 设置动画的监听器
image.setAnimation(alpha);
isExist = false;
}
}
}
private class RemoveAnimationListener implements AnimationListener {
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
System.out.println("End");
viewGroup.removeView(image); // 删除图片
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
System.out.println("Repeat");
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
System.out.println("Start");
}
}
}
点删除图片时,会先执行一个淡出效果,等动画结束时在动画监听器上删除图片。
源代码下载