- 浏览: 558377 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是11.38,你算出来36.43,要求N个点 ...
平均距离 -
xiao_android_jun:
[color=red][ size=xx-small ...
Android 之 进程的概念介绍 -
明子健:
小伙子,很有前途哦
《将博客搬至CSDN》 -
1140566087:
dugujiujian 写道R.layout.simple_s ...
Android 之 下拉(Spinner) 组件示例 -
dugujiujian:
R.layout.simple_spinner_dropdow ...
Android 之 下拉(Spinner) 组件示例
Android 动画
Andorid 平台提供了两类动画:
一:Tween(补间动画),即通过对场景里面的对象不断做图像变化(平移、缩放、旋转)产生动画效果;
二:Frame(逐帧动画),即顺序播放事先准备好的图像,跟电影类似;
Frame动画:
实现:
xml文件实现:
编码实现:
举例:xml实现过程:
定义xml文件,将该文件放在/res 下的anim或drawable目录中,文件名可以
作为资源ID 在代码中引用;
说明:<animation-list>元素是必须的,并且必须作为根元素,可以包含一个或
多个<item>元素;
<animation-list>属性:android:oneshot="" 是否循环播放,false表示循环,可选,默认false
<item>元素属性:android:drawble="" 指定此帧动画所对应的图片资源;
android:duration="" 代表此帧持续的时间,为整数,毫秒;
例如:
提示:图片资源的存放,根据帧图片的大小放大对应的资源目录中;
编码实现:
* 创建AnimationDrawable 对象,装载xml动画文件;
* 设置控件背景资源为对应的AnimationDrawable对象;
AnimationDrawable 类中方法的介绍:
start(); 开始
stop(); 停止
setAlpha(100); 设置帧动画的透明度 (0-255)
setOneShot(); 设置是否播放一遍帧动画;
isRunning(); 是否正在播放
isOneShot(); 是否只播放一遍
getNmberOfFrames(); 返回帧动画的帧数,即<item> 标签数;
getFrame(); 根据索引得到指定帧的Drawable对象; 索引0开始;
getDuration(); 获得指定帧停留时间;
addFrame(); 向AnimationDrawable对象中添加新的帧;
案例:小鸟飞翔,撞击并发出声音:
res/anim 下的动画文件:
<?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/bird00" android:duration="180"></item> <item android:drawable="@drawable/bird01" android:duration="180"></item> <item android:drawable="@drawable/bird02" android:duration="180"></item> <item android:drawable="@drawable/bird03" android:duration="180"></item> <item android:drawable="@drawable/bird04" android:duration="180"></item> <item android:drawable="@drawable/bird05" android:duration="180"></item> <item android:drawable="@drawable/bird06" android:duration="180"></item> <item android:drawable="@drawable/bird07" android:duration="180"></item> <item android:drawable="@drawable/bird08" android:duration="180"></item> <item android:drawable="@drawable/bird09" android:duration="180"></item> <item android:drawable="@drawable/bird10" android:duration="180"></item> </animation-list>
布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <!-- 自定义控件 --> <com.sun.frame.MyImageView android:id="@+id/imageview1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
主程序入口:
package com.sun.frame; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.view.View; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView imageview ; private AnimationDrawable ad; // // 数据初始化 public void init(){ imageview = (ImageView) findViewById(R.id.imageview1); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); imageview.setOnClickListener(listener); } // 点击事件监听器 private View.OnClickListener listener = new View.OnClickListener() { public void onClick(View v) { if(ad.isRunning()){ ad.stop(); }else ad.start(); } }; /** * Activity 呈现给用户的时候调用的 */ public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); ad = (AnimationDrawable) getResources().getDrawable(R.anim.frame); imageview.setBackgroundDrawable(ad); } }
自定义视图控件,便于控制图片的变化:
package com.sun.frame; import java.lang.reflect.Field; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.AnimationDrawable; import android.media.AudioManager; import android.media.SoundPool; import android.util.AttributeSet; import android.util.Log; import android.widget.ImageView; public class MyImageView extends ImageView { public AnimationDrawable animationDrawable; private Field field; // 领域对象 private SoundPool sp; private int music; /** * 初始化数据 * * @param context * @param attrs */ public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); Log.i("msg","MyImageView构造方法..."); /* 参数: * 1、 播放数据流的最大个数 * 2、数据流类型 * 3、声音质量 */ sp = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5); music = sp.load(context, R.raw.a2, 1); // Log.i("msg","MyImageView构造方法..."); } /** * 画一次图调用一次 功能:用于监听每帧动画的播放状态 */ protected void onDraw(Canvas canvas) { super.onDraw(canvas); Log.i("msg", "onDraw()..."); try { field = AnimationDrawable.class.getDeclaredField("mCurFrame"); field.setAccessible(true); // 设置可以访问 // 获取mCurFrame变量的当前值 int curFrame = field.getInt(animationDrawable); if (curFrame == 29) { //animationDrawable.stop(); // 停止播放 // 播放音乐特效 sp.play(music, 1, 1, 0, 0, 1); Log.i("msg", "特效出来啦..."); // 设置动画的播放位置 //field.setInt(animationDrawable, 0); // 从0 开始 }else{ sp.pause(music); } } catch (Exception e) { e.printStackTrace(); } } }
对自定义控件的使用,以及对应的效果:
package com.sun.frame; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; /** * 自定义控件的使用 * @author Administrator * *注意:在AnimationDrawable 类中有一个mCurFrame变量,int型,保存当前动画的 *播放位置;改变量为私有的,所以只能通过反射机制读写private变量 * */ public class UserFrameActivity extends Activity { private MyImageView image; private AnimationDrawable ad; // 控制动画 private SoundPool sp ; //音效池 -- 小鸟叫 private int music; // 音乐 // 程序入口 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.code_frame); // 获取控件对象,该对象为自定义对象 image = (MyImageView) findViewById(R.id.imageview1); image.setOnClickListener(listener); // 音效初始化 sp = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5); music = sp.load(this, R.raw.a3,1); //加载音乐 Log.i("msg", "onCreate()..."); } /** * Activity 呈现给用户时调用 */ public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); Log.i("msg","UserFrameActivity.onWindowFocusChanged()..."); image.setBackgroundResource(R.anim.frame_c); // 设置背景资源 ad = (AnimationDrawable) image.getBackground(); image.animationDrawable = ad; // 同步 ad.start(); sp.play(music, 1, 1, 0, -1, 1); } // 点击监听器 private OnClickListener listener = new OnClickListener() { public void onClick(View v) { if(ad.isRunning()){ ad.stop(); sp.pause(music); // 停止音效 Log.i("msg", "音效停止了..."); }else{ ad.start(); sp.resume(music); //(music, 1, 1, 0, -1, 1); // 播放音效 Log.i("msg","开始播放音效了..."); } } }; }
- frame1.rar (5.6 MB)
- 下载次数: 40
发表评论
-
Android 之 网络访问服务器,解析JSON数据
2014-03-28 22:50 3407提示:在访问网络,或者服务器的数据一定要注意 网络权限的声明: ... -
Android 之 AsyncTask 异步任务
2014-03-20 08:44 3520Android ... -
Android 之 Looper Handler Message 之间的关系
2014-03-19 10:16 3664Android 的消息 ... -
Android 之 多线程与Socket联合使用案例
2014-03-19 10:15 2669多线 ... -
Android 之 多线程和Socket套接字的使用介绍
2014-03-19 10:15 4882And ... -
Android 之 实现Runnable 接口与继承Thread的区别
2014-03-19 10:15 2197实现Runnable 接口 相 ... -
Android 之 GSON解析JSON数据
2014-03-19 10:14 4488... -
Android 之 使用Pull 解析xml文件
2014-03-18 21:04 1043/** * 使用Pull进行 xml 文件的解析 ... -
Android 之 使用DOM解析xml文件
2014-03-18 21:02 2741DOM 解析 xml 格式的文件 1、 xml简介:xml ... -
Android 之 百度API 密钥安全码生成
2014-03-04 22:29 2411近期要做个关于旅游助手的应用,开始接触百度API了。大神们 ... -
Android 之 EditText属性用法介绍
2014-01-06 23:49 3989EditText的属性 EditText继承关系:View-- ... -
Android 之 自定义适配器
2014-01-08 10:40 1765自定义适配器 1、实现 * 自定义适配器要继承 BaseA ... -
Android 之 自定义控件用法介绍
2014-01-08 10:40 1715自定义效果:实现:图片和文字混合 首先创建需要组合的子布局: ... -
Android 之 资源自适应与国际化
2014-01-08 10:40 3076<!-- 国际化和资源自适应 ... -
Android 之 Parcelable 序列化
2014-01-08 10:41 2697/* 序列化 * * 作 ... -
Android 之 五大布局案例
2014-01-08 10:41 21321、LinearLayout 线性布局例子: <Lin ... -
Android 之 通知Notification
2014-03-03 22:30 3890Notification 和 NotificationMana ... -
Android 之 手机全屏显示
2014-03-03 22:30 2340/* 1、全屏状态的显示 介绍:Android 中提供了Wi ... -
Android 之 拦截手机短信并自动转发
2014-03-03 22:29 5436拦截短信和发送短信都需要相关的权限: <?xml ve ... -
Android 之 将RAW资源文件写入SD卡工具类
2014-03-01 10:09 3608package com.sun.coptfiletosd; ...
相关推荐
Android提供了多种动画类型,其中包括 Tween 补间动画和 Frame 逐帧动画。本篇文章将主要聚焦于Frame动画,这是一种通过连续显示不同帧图片来创建动画效果的技术。 **Frame动画原理:** Frame动画基于一系列连续的...
Android提供了多种动画类型,其中包括 Tween 补间动画和 Frame 逐帧动画。本节我们将深入探讨Frame动画,这是一种将一系列静态图像连续播放以创建动态效果的技术。 **Frame动画的概念** Frame动画是Android中用于...
在Android开发中,逐帧动画是一种常见的动画效果,它通过连续播放一系列静态图像来创造出动态效果,类似于传统的电影制作方式。本源码着重探讨如何在Android应用中实现逐帧动画。 首先,我们要了解Android中的两种...
在Android平台上,逐帧动画是一种常见且直观的动画实现方式,尤其适用于创建简单的连续图像序列,比如行走、跳跃等动作效果。在这个特定的案例中,我们看到标题为“android逐帧动画”,描述提到有三张图片进行切换,...
下面我们将深入探讨如何在Android中实现逐帧动画,并了解相关知识点。 一、FrameAnimation简介 FrameAnimation是Android SDK提供的一种基于图像序列的动画机制,它通过在ImageView组件中连续显示一系列的静态图像来...
"逐帧动画"是Android动画系统中的一个基础概念,尤其适用于创建连续动态效果,如人物行走、物体旋转等。本教程将深入探讨逐帧动画的工作原理、实现方式以及如何在实际项目中运用。 逐帧动画是一种通过连续播放一...
其中,"逐帧动画"(Frame Animation)是一种简单且常用的技术,适用于创建一系列连续的静态图像来模拟动态效果。本篇文章将深入探讨Android逐帧动画的概念、实现方式以及相关的实践技巧。 逐帧动画的工作原理类似于...
在Android中,逐帧动画主要通过`Animation`类的子类`FrameAnimation`来实现。`FrameAnimation`会按照指定的时间间隔依次显示一系列的图像资源,形成连续的动画效果。以下将详细介绍如何使用Java语言在Android中创建...
Android提供了多种动画类型,包括补间动画(Tween Animation)、帧动画(Frame Animation)以及属性动画(Property Animation)。对于逐帧动画,我们主要关注帧动画,它适用于那些需要按照特定顺序播放一系列图片的...
帧动画(Frame Animation)是Android系统提供的一种简单实现连续播放多张图片来创建动态效果的方式。这种技术尤其适用于制作类似旋转、弹跳、飘动等简单的动画效果。下面我们将深入探讨帧动画的概念、实现方式以及在...
在Android开发中,逐帧动画是一种常见的2D动画形式,尤其适用于游戏开发或者复杂的动态效果展示。本资源“逐帧动画源码”旨在提供一个深入理解逐帧动画工作原理的实例,帮助开发者快速掌握Android系统中如何实现这种...
在Android开发中,逐帧动画是一种常见的动画效果,它通过连续播放一系列静态图像来创造出动态效果,类似于传统的动画制作方式。这份"Android源码——逐帧动画源码_new_70.zip"压缩包可能包含了一个关于如何在Android...
在这个"安卓Android源码——逐帧动画源码.zip"压缩包中,包含了一段实现逐帧动画的源代码,以及相关的图片资源和说明文档。下面我们将深入探讨逐帧动画的概念、实现方式,以及如何通过源码进行理解和应用。 逐帧...
本文将深入探讨“逐帧动画入门”这一主题,基于提供的标签和压缩文件名,我们可以推测这是关于Android平台上的一个学习资源,可能包含了一系列的源代码示例。 逐帧动画是一种常见的动画形式,它通过连续播放一系列...
在Android开发中,逐帧动画是一种常见的视觉效果,它通过连续播放一系列静态图像来创造动态效果,类似于传统的动画制作方式。这种技术广泛应用于游戏、应用界面的交互元素以及各种动态图标设计。本话题将深入探讨...
在Android开发中,逐帧动画(Frame Animation)是一种常见的实现简单动画效果的技术,它通过连续显示一系列静态图像来创建动态效果,类似于早期的电视动画。本Demo主要展示了如何在Android应用中实现逐帧动画,我们...
本示例主要关注的是逐帧动画(Frame-by-Frame Animation),这是一种常见的动画实现方式,尤其适用于创建连续的动态效果,如人物行走、物体翻转等。逐帧动画通过连续播放一系列静态图片来达到动态视觉效果。 在...
在Android中,帧动画(Frame Animation)是一种简单易用的动画形式,它通过连续播放一系列静态图像(帧)来创造出动画效果。这些帧通常保存为图片资源(如PNG或JPEG),然后在XML文件中定义它们的播放顺序和持续时间...