AnimationListener--mars第2季第11集

一、实现内容

实现带动画效果(淡入,缩放等)的添加或者删除控件,增强用户体验


二、新知识点

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;
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值