Android开发之动画实现
/*
* Android开发之动画实现
* 北京Android俱乐部群:167839253
* Created on: 2011-12-09
* Author: blueeagle
* Email: liujiaxiang@gmail.com
*/
在《Android开发之PopupWindow》这篇文章中,已经初步涉及到了动画的相关内容。对于一个弹出对话框。其动画效果可以利用xml文件进行设置,复习一下,就是对于对话框的飞进飞出,定义两个XML文件。例如:
飞入动画xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromYDelta="-100"
android:toYDelta="0"
android:duration="1000"
android:fillEnabled="true"
android:fillAfter="true"
/>
<scale android:fromXScale="0.6" android:toXScale="1.0"
android:fromYScale="0.6" android:toYScale="1.4" android:pivotX="50%"
android:pivotY="50%" android:duration="2000"
android:fillAfter="false"/>
<alpha android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+359"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000">
</rotate>
</set>
anin.xml
飞出动画:
anout.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"
>
<translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromYDelta="0"
android:toYDelta="-100"
android:duration="1000"
android:fillEnabled="true"
android:fillAfter="true"
/>
<scale android:fromXScale="1.0" android:toXScale="0.4"
android:fromYScale="1.0" android:toYScale="0.4" android:pivotX="50%"
android:pivotY="50%" android:duration="2000" />
<alpha android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="2000"
/>
</set>
总结一下上面动画的特点:
1. 透明度渐变
2. 尺寸伸缩
3. 画面旋转
4. 位置移动
那么这类动画,可以在xml中体现,当然也可以在代码中的体现。在代码中对于上述四种动画形式可以总结成:
1. 透明度渐变
AlphaAnimation(float fromAlpha,float toAlpha);
这里的参数跟xml文件中的参数为对应的,(后面的也均为对应)功能跟xml文件中的保持一致。
fromAlpha:表示动画起始时的透明度;
toAlpha:表示动画结束时的透明度;
0.0表示完全透明,1.0表示完全不透明。
2. 尺寸伸缩
ScaleAnimation(float fromXScale,float toXScale,float fromYScale,float toYScale,int pivotXType,float pivotX,int pivotYType,float pivotY)
fromXScale,toXScale:起始和结束时的X坐标的伸缩;
fromYScale,toYScale:起始和结束时的Y坐标的伸缩;
pivotX:表示伸缩动画相对于X坐标的开始位置;
pivotY:表示伸缩动画相对于Y坐标的开始位置;
pivotXType:X坐标上的伸缩模式;
pivotYType:Y坐标上的伸缩模式。
3. 画面旋转
RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotX,int pivotYType,float pivotY)
fromDegrees,toDegrees:起始和结束时的角度;
fromYScale,toYScale:起始和结束时的Y坐标的伸缩;
pivotX:表示伸缩动画相对于X坐标的开始位置;
pivotY:表示伸缩动画相对于Y坐标的开始位置;
pivotXType:X坐标上的伸缩模式;
pivotYType:Y坐标上的伸缩模式。
4. 位置移动
TranslateAnimation(float fromXDelta,float toXDelta,float fromYDelta,float toYDelte)
fromXDelta, fromYDelta:起始时候的坐标;
toXDelta, toYDelte:结束时候的坐标;
当然,在代码中做了这些设置后,是需要将动画播放出来的,那么播放动画的函数就为:
startAnimation(Animation animation)
animation为要播放的动画。
同时,需要设定一个播放动画的时间,利用:
setDuration(long duration)
duration为动画显示的时间,以毫秒为单位。
以上介绍的是Android平台下的Tween动画,Android平台下一共提供了两种动画,另外一种就是Frame动画。
Frame动画播放,需要有很多帧的图片。首先还是可以在XML文件中来说明。
framean.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/pic1" android:duration="100" />
<item android:drawable="@drawable/pic2" android:duration="100" />
<item android:drawable="@drawable/pic3" android:duration="100" />
…
…
…
</animation-list>
JAVA代码:
public class GameView extends View
{
// 定义AnimationDrawable动画对象
private AnimationDrawable frameAnimation = null;
Context mContext = null;
public GameView(Context context)
{
super(context);
mContext = context;
//定义一个ImageView用来显示动画
ImageView myImageView = new ImageView(mContext);
// 装载动画布局文件
myImageView.setBackgroundResource(R.anim.framean);
//构建动画
frameAnimation = (AnimationDrawable)myImageView.getBackground();
//设置是否循环
frameAnimation.setOneShot( false );
//设置该类显示的动画
this.setBackgroundDrawable(frameAnimation);
}
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_DPAD_UP:
/* 开始播放动画 */
frameAnimation.start();
break;
}
return true;
}
}
直接用代码,而不用xml描述的方法为:
public class GameView extends View {
// 定义AnimationDrawable动画对象
private AnimationDrawable frameAnimation = null;
Context mContext = null;
//定义一个Drawable对象
Drawable myBitAnimation = null;
public GameView(Context context) {
super(context);
//实例化AnimationDrawable对象
mContext = context;
frameAnimation = new AnimationDrawable();
//装载资源,循环装载需要作为动画的图片
for(int i=1;i<=3;i++)
{
int id = getResources().getIdentifier("pic"+i, "drawable", mContext.getPackageName());
myBitAnimation = getResources().getDrawable(id);
//为动画添加一帧,参数myBitAnimation是该帧的图片,参数100是显示时间,毫秒为单位
frameAnimation.addFrame(myBitAnimation, 100);
}
//设置是否循环,false表示循环
frameAnimation.setOneShot(false);
//设置本类将要显示这个动画
this.setBackgroundDrawable(frameAnimation);
public void onDraw(Canvas canvas){
super.onDraw(canvas);
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_DPAD_UP:
//开始播放动画
frameAnimation.start();
break;
}
return true;
}
}
分享到:
相关推荐
本文实例讲述了Android开发之动画实现方法。分享给大家供大家参考。具体分析如下: 动画分为三种: 逐帧动画、布局动画和控件动画 控件动画实现 通过重写Animation的 applyTransformation (float interpolatedTime, ...
这是用androidOpenGL 实现的3D 动画 导入工程即可运行。
雨松MOMO带你做游戏 Android 游戏开发之Tween动画的实现 欢迎大家下载阅读 哇咔咔~~~
博文介绍:http://blog.csdn.net/qq_21376985/article/details/52847317 【Android】Android开发之常用的loading等待效果实现,仿微博等待动画。两种实现方式详解
本文实例讲述了Android开发之图片旋转功能实现方法。分享给大家供大家参考,具体如下: 在Android中进行图像旋转需要使用Matrix,它包含了一个3*3的矩阵,专门用于进行图像变换匹配。Matrix ,中文里叫矩阵,高等...
雨松MOMO带你做游戏 Android 游戏开发之使用AnimationDrable实现Frame动画 欢迎大家下载阅读。HOHO~~
抖音直播间赠送礼物飘屏动画; 赠送金币动画; 赠送礼物动画; 可单独显示; 可混合显示; 可设置多个礼物集合自动轮播显示; 可自定义设置显示动画和时长; 可自定义UI界面; 可自定义任何代码实现; 源码开源; 可...
android 实现点赞动画,挺炫哦!可参考blog:http://blog.csdn.net/hehaiminginadth/article/details/46473269
当下App中二维码扫描、人脸扫描的场景越来越多,扫描的动画可以使用平移动画:TranslateAnimation Demo中是使用TranslateAnimation实现一个人脸扫描的效果,上下来回滑动(二维码扫描同理),参考我的博客有详细描述...
Android移动开发-属性动画的实现,该示范了如何利用属性动画来控制“小球”掉落动画,该示例会监听用户在屏幕上的“触屏”时间,程序会在屏幕的触摸点绘制一个小球,并用动画控制该小球向下掉落。
Opengl es 精灵动画 实现旋转放大的地球动画
android 游戏开发之Tween动画的实现~~~~~~~~~~~
5.3 动画实现 5.3.1 Tween动画 5.3.2 Frame动画 5.3.3 GIF动画播放 5.4 小结 第6章 Android数据存储 6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 ...
群里的朋友发了一个登录的原型图,觉得挺有意思,就写出了效果
本文实例讲述了Android编程实现RotateAnimation设置中心点旋转动画效果。分享给大家供大家参考,具体如下: 在xml设置: <?xml version=1.0 encoding=utf-8?> <rotate xmlns:android=...
Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果。Android 动画框架详解由原理篇和实例篇两部分组成。本文是第一部分原理篇,主要分析 Tween 动画的实现原理, 最后简单介绍在 Android...
我的Android开发之旅(四):Android三种动画效果的浅入之帧动画1. 前言2. 帧动画3. 如何使用3.1 AnimationDrawable3.2 Xml实现3.3 Java实现4. 淡入淡出动画5. 尾声 1. 前言 Android的动画分为3大类:View动画、...
这是一个 android 动画特效库, 可以实现各种炫酷动画。 1. 安装 gradle: dependencies { compile 'com.gplibs:magic-surface-view:1.1.1' } 2. 一些示例效果 此文档只做一些简单说明, 具体使用方法还请参考 示例...
本文实例讲述了Android开发之背景动画简单实现方法。分享给大家供大家参考,具体如下: 1、先创建动画层,有三张图片 <?xml version=1.0 encoding=utf-8?> <animation xmlns:android=...