前面我已经说了变换动画,并且变换动画中分为4种情况:透明度动画、旋转动画、缩放动画、位移动画。
今天我来说说关于使用变换动画中的4种类型来实现它们的糅合。
我在这里主要使用了一个Animation对象中的一个监听方法--setAnimationListener。这个方法里面只有一个参数,安卓api给出的这个方法的完整形态--
void android.view.animation.Animation.setAnimationListener(AnimationListener listener)。从中我们可以知道,这个参数需要传递一个AnimationListener 类型的参数,我们只需要使用匿名内部类来即可(这里我的要求简单,所以使用的是匿名内部类)。
当我们使用了匿名内部类后,会出现三个方法。代码如下
JAVA代码
1 animation1.setAnimationListener(new AnimationListener() { 2 //当动画开始时调用 3 public void onAnimationStart(Animation animation) { 4 // TODO Auto-generated method stub 5 6 } 7 //当动画重复时调用 8 public void onAnimationRepeat(Animation animation) { 9 // TODO Auto-generated method stub 10 11 } 12 //当动画开始时调用 13 public void onAnimationEnd(Animation animation) { 14 // TODO Auto-generated method stub 15 imageview.startAnimation(animation2); 16 } 17 });
其中方法animation1和animation2都是Animation对象。
看到这里我们应该怎么实现了吧,话不多说,直接贴完整的代码
anim文件下的xml代码
1.alpha.xml代码(animation1加载的)
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android"> 3 <alpha 4 android:duration="1000" 5 android:fromAlpha="0.1" 6 android:toAlpha="1.0" 7 /> 8 </set>
2.translate.xml代码
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" > 3 4 <translate 5 android:duration="1000" 6 android:fromXDelta="10" 7 android:fromYDelta="10" 8 android:toXDelta="100" 9 android:toYDelta="100" /> 10 11 </set>
布局文件代码
xml代码
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 tools:context="com.example.Tween_Animation.Alpha_MainActivity" > 7 8 <Button 9 android:id="@+id/button_scale" 10 android:layout_width="fill_parent" 11 android:layout_height="wrap_content" 12 android:text="@string/button_stringScaleAnimation" /> 13 14 <LinearLayout 15 android:gravity="center" 16 android:layout_width="fill_parent" 17 android:layout_height="fill_parent" 18 android:orientation="vertical" > 19 20 <ImageView 21 android:id="@+id/imageview_scale" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:src="@drawable/ic_launcher" /> 25 </LinearLayout> 26 27 </LinearLayout>
activity代码
JAVA代码
1 package com.example.Demo1; 2 3 4 5 import com.example.androidanimation.R; 6 7 import android.app.Activity; 8 import android.os.Bundle; 9 import android.view.View; 10 import android.view.View.OnClickListener; 11 import android.view.animation.Animation; 12 import android.view.animation.Animation.AnimationListener; 13 import android.view.animation.AnimationUtils; 14 import android.widget.Button; 15 import android.widget.ImageView; 16 /* 17 * 组合动画 18 * 先播放一个动画然后再播放一个动画 19 */ 20 public class MainActivity extends Activity implements OnClickListener{ 21 private Button button = null; 22 private ImageView imageview = null; 23 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_main); 27 button = (Button) findViewById(R.id.button_scale); 28 imageview = (ImageView) findViewById(R.id.imageview_scale); 29 button.setText("组合动画1"); 30 button.setOnClickListener(this); 31 } 32 public void onClick(View v) { 33 Animation animation1 = AnimationUtils.loadAnimation(this, R.anim.alpha); 34 imageview.startAnimation(animation1); 35 final Animation animation2 = AnimationUtils.loadAnimation(this, R.anim.translate); 36 animation1.setAnimationListener(new AnimationListener() { 37 //当动画开始时调用 38 public void onAnimationStart(Animation animation) { 39 // TODO Auto-generated method stub 40 41 } 42 //当动画重复时调用 43 public void onAnimationRepeat(Animation animation) { 44 // TODO Auto-generated method stub 45 46 } 47 //当动画开始时调用 48 public void onAnimationEnd(Animation animation) { 49 // TODO Auto-generated method stub 50 imageview.startAnimation(animation2); 51 } 52 }); 53 } 54 }
这里只是实现了两种类型的动画来完成效果,其实我们可以多种多样,看自己的需要了。
时间: 2024-11-08 07:24:26