一、实现内容
实现带动画效果(淡入,缩放等)的添加或者删除控件,增强用户体验
二、新知识点
1、如何删除或者增加控件?要在<RelativeLayout >标签里添加id属性,通过父控件删除、增加子控件,使用ViewGroup
2、AnimationListener的使用(实现后有三个内部方法)。下面步骤2中RemoveButtonListener, RemoveAnimationLIstener
3、如何在代码里新建一个ImageView,并设置布局属性?
三、实现步骤
1、设置布局,res/layout/activity_main.xml, 要在<RelativeLayout >标签里添加id属性,通过父控件删除、增加子控件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layoutId" //给layout添加id属性
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/addButtonId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="添加图片"
/>
<Button
android:id="@+id/removeButtonId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/addButtonId"
android:text="删除图片"
/>
<ImageView
android:id="@+id/imageId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="97dp"
android:src="@drawable/luckygirl" />
</RelativeLayout>
2、在src/MainActivity.java,使用AnimationListener,监听动画进程并执行删除控件
package com.example.s02_e11_animatiomlistener;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
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.view.animation.ScaleAnimation;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button addButton,removeButton;
private ImageView imageView;
private ViewGroup viewGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.imageId);
viewGroup=(ViewGroup)findViewById(R.id.layoutId);
addButton=(Button)findViewById(R.id.addButtonId);
addButton.setOnClickListener(new AddButtonListener());
removeButton=(Button)findViewById(R.id.removeButtonId);
removeButton.setOnClickListener(new RemoveButtonListener());
}
private class AddButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
//创建一个缩放效果的Animation对象
ScaleAnimation animation=new ScaleAnimation(0, 1, 0, 1);
//设置Animation的属性
animation.setDuration(1000);
animation.setFillAfter(true);
animation.setStartOffset(300);
//创建一个imageView,并设置资源
ImageView imageadd=new ImageView(MainActivity.this);
imageadd.setImageResource(R.drawable.beautifulgirl);
//设置新添加的imageadd的布局属性
viewGroup.addView(imageadd,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
imageadd.setAnimation(animation);
}
}
private class RemoveButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
//创建一个淡出效果的Animation对象
AlphaAnimation animation=new AlphaAnimation(1, 0);
//为Animation对象设置属性
animation.setDuration(1000);
animation.setStartOffset(300);
//为Animation对象设置监听器
animation.setAnimationListener(new RemoveAnimationListener());
imageView.setAnimation(animation);
}
}
private class RemoveAnimationListener implements AnimationListener{
@Override//该方法在淡出效果执行后被调用
public void onAnimationEnd(Animation animation) {
System.out.println("end");
//通过layout删除layout里面的imageView控件
viewGroup.removeView(imageView);
}
@Override//该方法在动画重复时被调用
public void onAnimationRepeat(Animation animation) {
System.out.println("repeat");
}
@Override//该方法在动画开始时被调用
public void onAnimationStart(Animation animation) {
System.out.println("start");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}