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

android动画 -- 帧动画 补间动画

2016-01-02 10:48 274 查看
(1)Frame Animation(帧动画) 主要用于播放一帧帧准备好的图片,类似GIF图片,优点是使用简单方便、缺点是需要事先准备好每一帧图片;

(2)Tween Animation(补间动画) 仅需定义开始与结束的关键帧,而变化的中间帧由系统补上,优点是不用准备每一帧,缺点是只改变了对象绘制,而没有改变View本身属性。因此如果改变了按钮的位置,还是需要点击原来按钮所在位置才有效。

下面比较好的参考学习下:

http://www.2cto.com/kf/201504/393298.html

http://blog.csdn.net/forlong401/article/details/9750903/

Tween Animation 例子(多动手):

MainActivity.java



package com.example.anim;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);

final Animation translateAnimation=new TranslateAnimation(0,200,0,-100);

//设置旋转变化动画对象
//final Animation translateAnimation = new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

btn1.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
translateAnimation.setDuration(3000);      //设置动画持续时间

translateAnimation.setRepeatCount(2);      //设置重复次数
translateAnimation.setRepeatMode(Animation.RESTART);   //重新从头执行
//translateAnimation.setRepeatMode(Animation.REVERSE); //反方向执行

translateAnimation.setFillAfter (true);   //保留在终止位置

image.setAnimation(translateAnimation);   //设置动画效果
translateAnimation.startNow();            //启动动画
}
});

/*
*   translateAnimation.setFillAfter (true);   //保留在终止位置
* 虽然设置了保留在终止位置 但是如果点击取消 ,图片仍然会回到原来的位置
* 因为图片的属性是没有改变的
*/
btn2.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
translateAnimation.cancel();    //会立即取消一个正在执行的动画
}
});
}

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

}


activity_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" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_centerVertical="true"
android:src="@drawable/ic_launcher" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/imageView1"
android:layout_alignParentLeft="true"
android:layout_marginBottom="76dp"
android:layout_marginLeft="46dp"
android:text="开始动画" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_marginLeft="26dp"
android:layout_toRightOf="@+id/button1"
android:text="取消动画" />

</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: