android中动画分为3种:
这篇博客主要来分析Tween Animation的基本使用。
Tween Animation有四种形式:
这四种动画实现方式都是通过Animation类和AnimationUtils配合实现的。动画效果可以预先配置在res/anim目录下的xml文件中。
scale的参数如下:
此外,Animation类是所有动画(scale、alpha、translate、rotate)的基类,从Animation类继承的属性:
光说不练习是不行的,这里给出一个anim的xml文件、一个layout布局文件和一个Activity类,来练习一下scale animation的使用。
res/anim/anim_scale.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="700"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:pivotX="150"
android:pivotY="300"
android:toXScale="1.4"
android:toYScale="1.4"
android:fillAfter="true"
android:repeatCount="10"
android:repeatMode="reverse">
</scale>
res/layout/tween_animation_layout.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/alpha_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/alpha" />
<Button
android:id="@+id/scale_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/scale" />
<Button
android:id="@+id/rotate_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/rotate" />
<Button
android:id="@+id/trans_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/trans" />
</LinearLayout>
<ImageView
android:id="@+id/anim_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
android:src="@drawable/splash_logo" />
</LinearLayout>
动画演示实现类实现如下:
import com.example.photocrop.R;
import android.app.Activity;
import android.os.Bundle;
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 TweenAnimationTest extends Activity implements OnClickListener {
private Button alphaButton;
private Button scaleButton;
private Button rotateButton;
private Button transButton;
private ImageView animImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tween_animation_layout);
initView();
}
private void initView() {
animImageView = (ImageView) findViewById(R.id.anim_image);
alphaButton = (Button) findViewById(R.id.alpha_button);
scaleButton = (Button) findViewById(R.id.scale_button);
rotateButton = (Button) findViewById(R.id.rotate_button);
transButton = (Button) findViewById(R.id.trans_button);
alphaButton.setOnClickListener(this);
scaleButton.setOnClickListener(this);
rotateButton.setOnClickListener(this);
transButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.alpha_button:
break;
case R.id.scale_button:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_scale);
animImageView.startAnimation(animation);
break;
case R.id.rotate_button:
break;
case R.id.trans_button:
break;
}
}
}
alpha的参数如下:
从Animation类继承的属性:
我们以上一个TweenAnimationTest类为模板,当点击alpha button的时候,我们触发透明度动画效果。
res/anim/anim_alpha.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fillBefore="true"
android:fromAlpha="0.0"
android:toAlpha="1.0" >
</alpha>
响应点击alpha button的listener事件为:
case R.id.alpha_button:
Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.anim_alpha);
animImageView.startAnimation(alphaAnimation);
break;
rotate参数如下:
从Animation类继承的属性:
res/anim/anim_rotate.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:fromDegrees="0"
android:pivotX="0"
android:pivotY="0"
android:repeatCount="3"
android:toDegrees="810" >
</rotate>
响应点击alpha button的listener事件为:
case R.id.rotate_button:
Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.anim_rotate);
animImageView.startAnimation(rotateAnimation);
break;
translate参数:
从Animation类继承的属性:
注意:京东splash页面的进度条用的就是translate动画。
res/anim/anim_rotate.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fillAfter="true"
android:fromXDelta="0.0"
android:toXDelta="60%p" >
</translate>
响应点击alpha button的listener事件为:
case R.id.trans_button:
Animation transAnimation = AnimationUtils.loadAnimation(this, R.anim.anim_translate);
animImageView.startAnimation(transAnimation);
break;
原文地址:http://blog.csdn.net/wzy_1988/article/details/46012881