android开发之Animations的使用(二)

时间:2023-03-08 22:39:02
android开发之Animations的使用(二)

android开发之Animations的使用(二)

本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提高了代码的可重用性和可维护性.

使用的基本过程例如以下:

1、首先在res目录下创建一个anim目录

 2、在此目录中新建四种动画效果的xml文件(scale.xml,rotate.xml,alpha.xml,translate.xml)

 3、在代码中直接使用AnimationUtils调用静态方法loadAnimation载入创建一个animation对象

 4、执行animation对象



实例代码例如以下:

package com.example.animationtest2;





import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.Button;

import android.widget.ImageView;









public class MainActivity extends Activity {





private ImageView imageView = null;

private Button scaleButton = null;

private Button translateButton = null;

private Button rotateButton = null;

private Button alphaButton = null;







@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);



imageView = (ImageView)findViewById(R.id.myImage);

scaleButton = (Button)findViewById(R.id.scaleButton);

translateButton = (Button)findViewById(R.id.translateButton);

rotateButton = (Button)findViewById(R.id.rotateButton);

alphaButton = (Button)findViewById(R.id.alphaButton);



scaleButton.setOnClickListener(new setScaleListener());

translateButton.setOnClickListener(new setTranslateListener());

rotateButton.setOnClickListener(new setRotateListener());

alphaButton.setOnClickListener(new setAlphaListener());



}



//动画缩放效果监听器

class setScaleListener implements OnClickListener{





@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale);



imageView.startAnimation(animation);

}



}



//动画移动效果监听器

class setTranslateListener implements OnClickListener{





@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.translate);



imageView.startAnimation(animation);


}



}



//旋转动画效果监听器

class setRotateListener implements OnClickListener{





@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);



imageView.startAnimation(animation);

}



}





//渐入渐出动画效果监听器

class setAlphaListener implements OnClickListener{





@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);



imageView.startAnimation(animation);

}



}











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

}





}







主布局文件main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >





    <TextView

        android:id="@+id/myText"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />

    

    <LinearLayout 

        android:id="@+id/imgLayout"

        android:layout_below="@id/myText"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:padding="55dp"

        >

        <ImageView

        android:id="@+id/myImage"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:src="@drawable/ic_launcher"

        />

    </LinearLayout>

    

    

    <Button 

        android:id="@+id/scaleButton"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_below="@id/imgLayout"

        android:text="@string/scale"

        />

    

    <Button 

        android:id="@+id/translateButton"

        android:layout_below="@id/scaleButton"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/translate"

        />

    

    <Button 

        android:id="@+id/rotateButton"

        android:layout_below="@id/translateButton"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/rotate"

        />

    

    <Button 

        android:id="@+id/alphaButton"

        android:layout_below="@id/rotateButton"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/alpha"

        />





</RelativeLayout>











四种动画效果的xml文件分别例如以下:

scale.xml:

<?

xml version="1.0" encoding="utf-8"?>

<set android:shareInterpolator="true" xmlns:android="http://schemas.android.com/apk/res/android">

    <scale 

        android:fromXScale="1"

        android:toXScale="0"

        android:fromYScale="1"

        android:toYScale="0"

        android:pivotX="50%"

        android:pivotY="50%"

        android:duration="2000"

        />

<!-- 50%p  表示 相对父控件的中间位置 -->

   <!-- 50%   表示相对自身的中间位置 -->

   <!-- 50   表示绝对位置 -->

</set>



rotate.xml:

<?

xml version="1.0" encoding="utf-8"?>

<set android:shareInterpolator="true" xmlns:android="http://schemas.android.com/apk/res/android">

<rotate 

   android:fromDegrees="0"

   android:toDegrees="-360"

   android:pivotX="50%"

   android:pivotY="50%"

   android:duration="2000"

   />   

   <!-- 50%p  表示 相对父控件的中间位置 -->

   <!-- 50%   表示相对自身的中间位置 -->

   <!-- 50   表示绝对位置 -->

   <!-- 360 表示顺时针  -360表示逆时针旋转 --> 

</set>



alpha.xml:



<?xml version="1.0" encoding="utf-8"?>

<set android:shareInterpolator="true" xmlns:android="http://schemas.android.com/apk/res/android">  <!-- set相当于AnimationSet对象 -->    

    <alpha

        android:fromAlpha="1.0"

        android:toAlpha="0.1"

        android:duration="2000"

        />

</set>



translate.xml:

<?xml version="1.0" encoding="utf-8"?>

<set android:shareInterpolator="true" xmlns:android="http://schemas.android.com/apk/res/android">

    <translate 

        android:fromXDelta="0%"

        android:toXDelta="50%"

        android:fromYDelta="0%"

        android:toYDelta="100%"

        android:duration="2000"

        />

    

      <!-- 50%p  表示 相对父控件的中间位置 -->

   <!-- 50%   表示相对自身的中间位置 -->

   <!-- 50   表示绝对位置 -->



</set>



实现效果例如以下:

android开发之Animations的使用(二)



按下相关button查看相关效果