Android动画之Frame Animation(逐帧动画)
来源:互联网 发布:买车团购什么软件 编辑:程序博客网 时间:2024/05/21 22:47
Frame Animation(逐帧动画)
在Android中,动画Animation的实现有两种方式:Tween Animation(补间动画)和Frame Animation(帧动画)。渐变动画是通过对场景里的对象不断做图像变换(平移、缩放、旋转等)产生动画效果。帧动画则是通过顺序播放事先准备好的图像来产生动画效果,和电影类似。先来说说什么事Frame Animation(逐帧动画)。
逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 因为逐帧动画的帧序列内容不一样,不但给制作增加了负担而且最终输出的文件量也很大,但它的优势也很明显:逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容,而它类似与电影的播放模式,很适合于表演细腻的动画。
需要AnimationDrawable定义好的其他的一些方法来操作逐帧动画,下面简单介绍一下AnimationDrawable的常用方法:
- void start():开始播放逐帧动画
- void stop():停止播放逐帧动画
- void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间
- int getDuration(int i):得到指定index的帧的持续时间
- Drawable getFrame(int index):得到指定index的帧Drawable
- int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量
- boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放
- boolean isRunning():当前AnimationDrawable是否正在播放
- void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放
首先在android的res/drawble下放置一系列用到的图并创建animlist.xml文件
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/leibao_01" android:duration="200"/> <item android:drawable="@drawable/leibao_02" android:duration="200" /> <item android:drawable="@drawable/leibao_03" android:duration="200" /> <item android:drawable="@drawable/leibao_04" android:duration="200" /> <item android:drawable="@drawable/leibao_05" android:duration="200" /> <item android:drawable="@drawable/leibao_06" android:duration="200" /> <item android:drawable="@drawable/leibao_07" android:duration="200"/> </animation-list>
然后设置图片显示的布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 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" android:background="@android:color/white" tools:context="com.example.admin.frameanimation.AnimationActivity"> <ImageView android:id="@+id/animation_iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/animlist" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BEGIN" android:textColor="@android:color/black" android:layout_marginLeft="52dp" android:layout_marginStart="52dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/begin"/> <Button android:id="@+id/end" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="END" android:textColor="@android:color/black" android:layout_marginRight="42dp" android:layout_marginEnd="42dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /></RelativeLayout>
之后修改AnimationActivity.java中的内容
package com.example.admin.frameanimation; import android.os.Bundle;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class AnimationActivity extends Activity implements OnClickListener { private ImageView imageView; private Button btnStart, btnStop; private AnimationDrawable animationDrawable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intiView(); initData(); } /** *初始化组件 */ private void intiView() { imageView = (ImageView) findViewById(R.id.animation_iv); btnStart = (Button) findViewById(R.id.begin); btnStop = (Button) findViewById(R.id.end); } /** *初始化数据 */ private void initData() { btnStart.setOnClickListener(this); btnStop.setOnClickListener(this); //Sets a drawable as the content of this ImageView. imageView.setImageResource(R.drawable.animlist); //给动画资源赋值 animationDrawable = (AnimationDrawable) imageView.getDrawable(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.begin: animationDrawable.start();//开始 break; case R.id.end: animationDrawable.stop(); //停止 break; } }}
最后运行一下就行了
阅读全文
2 0
- Android动画(View Animation之Frame Animation(逐帧动画))
- Android动画之Frame Animation逐帧动画
- Android动画效果之Frame Animation(逐帧动画)
- Android动画之逐帧动画(Frame Animation)实例详解
- Android动画效果之Frame Animation(逐帧动画)
- Android动画之Frame Animation(逐帧动画)
- Android动画效果之Frame Animation(逐帧动画)
- Android动画之逐帧动画(Frame Animation)实例详解
- Android动画效果之Frame Animation(逐帧动画)
- Android-Animation动画之Frame Animation帧动画
- Android 动画之 ---- Drawable Animation (Frame动画,帧动画)
- Android之-----Frame帧动画(Animation)
- Android动画之Frame Animation
- Animation---详解Android动画之Frame Animation
- 帧动画,Android中的动画 --Frame Animation
- Android动画Frame Animation 帧动画
- Android动画-Frame Animation(帧动画)
- Android 动画--帧动画(Frame Animation)
- 指针作为函数参数传递
- Minitool安装出现的问题
- 4
- 2017年上海金马五校程序设计竞赛之STEED Cards
- BaseDao设计思路
- Android动画之Frame Animation(逐帧动画)
- C++虚函数实现多态
- 区块链之quorum的安装
- 游戏策划游戏研发必读经典题文二
- Android消息机制
- Android常用控件
- 文件内容合并
- OpenGL学习脚印: 使用索引绘图(index drawing)
- 北理mooc题——链表合并