您的位置:首页 > 移动开发 > Android开发

android学习之animation

2014-06-25 14:57 99 查看
 关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式:

1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画

在实现动画时,android提供如下4中animation的类型:

先给出几种ainimation的xml配置

scale:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator= "@android:anim/decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1"
android:fromYScale="0.0"
android:toYScale="1"
android:pivotX="0%"
android:pivotY="0%"
android:startOffset="0"
android:duration="500"
/>
</set>
<!--
interpolator指定动画插入器,常见的有加速减速插入器accelerate_decelerate_interpolator,加速插入器accelerate_interpolator,减速插入器decelerate_interpolator。
fromXScale,fromYScale,动画开始前X,Y的缩放,0.0为不显示,1.0为正常大小
toXScale,toYScale,动画最终缩放的倍数,1.0为正常大小,大于1.0放大
pivotX,pivotY动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从屏幕中间开始
startOffset,动画多次执行的间隔时间,如果只执行一次,执行前会暂停这段时间,单位毫秒
duration,一次动画效果消耗的时间,单位毫秒,值越小动画速度越快
repeatCount,动画重复的计数,动画将会执行该值+1次
repeatMode,动画重复的模式,reverse为反向,当第偶次执行时,动画方向会相反。restart为重新执行,方向不变
-->
translate:

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

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

android:interpolator="@android:anim/decelerate_interpolator"

android:fromXDelta="-10%p"

android:toXDelta="0%p"

android:duration="500">

</translate>alpha:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 透明度控制动画效果 alpha
浮点型值:
fromAlpha 属性为动画起始时透明度
toAlpha 属性为动画结束时透明度
说明:
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字

长整型值:
duration 属性为动画持续时间
说明:
时间以毫秒为单位
-->

<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="500"
/>

</set>

rotate:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0"
android:toDegrees="359"
android:duration="500"
android:repeatCount="0"
android:pivotX="50%"
android:pivotY="50%" />
</set>
<!-- android:fromDegrees 起始的角度度数
android:toDegrees 结束的角度度数,负数表示逆时针,正数表示顺时针。如10圈则比android:fromDegrees大3600即可
android:pivotX 旋转中心的X坐标
浮点数或是百分比。浮点数表示相对于Object的左边缘,如5; 百分比表示相对于Object的左边缘,如5%; 另一种百分比表示相对于父容器的左边缘,如5%p; 一般设置为50%表示在Object中心
android:pivotY 旋转中心的Y坐标
浮点数或是百分比。浮点数表示相对于Object的上边缘,如5; 百分比表示相对于Object的上边缘,如5%; 另一种百分比表示相对于父容器的上边缘,如5%p; 一般设置为50%表示在Object中心
android:duration 表示从android:fromDegrees转动到android:toDegrees所花费的时间,单位为毫秒。可以用来计算速度。
android:interpolator表示变化率,但不是运行速度。一个插补属性,可以将动画效果设置为加速,减速,反复,反弹等。默认为开始和结束慢中间快,
android:startOffset 在调用start函数之后等待开始运行的时间,单位为毫秒,若为10,表示10ms后开始运行
android:repeatCount 重复的次数,默认为0,必须是int,可以为-1表示不停止
android:repeatMode 重复的模式,默认为restart,即重头开始重新运行,可以为reverse即从结束开始向前重新运行。在android:repeatCount大于0或为infinite时生效
android:detachWallpaper 表示是否在壁纸上运行
android:zAdjustment 表示被animated的内容在运行时在z轴上的位置,默认为normal。
normal保持内容当前的z轴顺序
top运行时在最顶层显示
bottom运行时在最底层显示 -->
再给出main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff">
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="100dp"
android:background="#437fad"
android:text="其他控件"
android:onClick="true"
android:textSize="30sp"
android:gravity="center"
/>
<TextView
android:id="@+id/view1"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_marginLeft="100dp"
android:gravity="center"
android:text="这里是动画的text......"
android:background="#000000"
android:visibility="gone"/>

<RelativeLayout
android:layout_height="match_parent"
android:layout_width="100dp"
android:id="@+id/btn_widget"
android:background="#ffffff"
>
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="lsitBtn1"
android:textSize="20sp"/>
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="lsitBtn2"
android:textSize="20sp"
android:layout_below="@id/btn1"/>
<Button
android:id="@+id/btn3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="lsitBtn3"
android:textSize="20sp"
android:layout_below="@id/btn2"/>
<Button
android:id="@+id/btn4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="lsitBtn4"
android:textSize="20sp"
android:layout_below="@id/btn3"/>
</RelativeLayout>

</RelativeLayout>



最后是mainactivity:

package com.example.animationtest;

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.TextView;

public class MainActivity extends Activity {
//定义4个Button,其中:btn1是translate,btn2是scale,btn3是alpha
//btn4是rotate
private Button startBtn1,startBtn2,startBtn3,startBtn4;
private TextView myView1;
private TextView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startBtn1 = (Button) findViewById(R.id.btn1);
startBtn2 = (Button) findViewById(R.id.btn2);
startBtn3 = (Button) findViewById(R.id.btn3);
startBtn4 = (Button) findViewById(R.id.btn4);
myView1 = (TextView) findViewById(R.id.view1);
webview = (TextView) findViewById(R.id.textview);
startBtn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(isViewVisible(myView1)){
ViewGoneTanslate(myView1);
}
else{
ViewVisibleTanslate(myView1);
}
}

});
startBtn2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(isViewVisible(myView1)){
ViewGoneScale(myView1);
}
else{
ViewVisibleScale(myView1);
}
}

});
startBtn3.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(isViewVisible(myView1)){
ViewGoneAlpha(myView1);
}
else{
ViewVisibleAlpha(myView1);
}
}

});
startBtn4.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(isViewVisible(myView1)){
ViewGoneRotate(myView1);
}
else{
ViewVisibleRotate(myView1);
}
}

});
webview.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(isViewVisible(myView1))
ViewGoneAlpha(myView1);
}
});

}
//判断此时的view是否可见
public boolean isViewVisible(View v) {
if(v.getVisibility()==View.VISIBLE)
return true;
else
return false;
}
//对4中动画效果,每种有2个状态,一个是动画显示,一个是动画消失
public void ViewGoneTanslate(View v) {
v.setVisibility(View.GONE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.anti_translate);
v.startAnimation(scale);
}
public void ViewVisibleTanslate(View v) {
v.setVisibility(View.VISIBLE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.translate);
v.startAnimation(scale);
}
public void ViewGoneScale(View v) {
v.setVisibility(View.GONE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.anti_scale);
v.startAnimation(scale);
}
public void ViewVisibleScale(View v) {
v.setVisibility(View.VISIBLE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale);
v.startAnimation(scale);
}
public void ViewGoneAlpha(View v) {
v.setVisibility(View.GONE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.anti_alpha);
v.startAnimation(scale);
}
public void ViewVisibleAlpha(View v) {
v.setVisibility(View.VISIBLE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
v.startAnimation(scale);
}
public void ViewGoneRotate(View v) {
v.setVisibility(View.GONE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);
v.startAnimation(scale);
}
public void ViewVisibleRotate(View v) {
v.setVisibility(View.VISIBLE);
Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);
v.startAnimation(scale);
}

}


最后,附上源码下载地址:http://download.csdn.net/detail/photoed/7550501

欢迎大家一起讨论。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: