动画的正确使用姿势

一、Android 的动画由alpha、scale、translate、rotate四种类型组成。它们在xml中的使用姿势是怎样的呢?

在xml中定义的动画存放于res/anim文件夹下,使用R.anim.xxx来引用

这里写图片描述

alpha、scale、translate、rotate这四种动画都继承自Animation类,继承的属性如下:

android:duration="1500" //动画持续时间
android:fillAfter="true" //动画结束时是否保持结束时的状态
android:fillBefore="true" //动画结束时是否还原开始时的状态
android:repeatCount="11"  //重复次数,repeatCount和repeatMode要一起使用才有效果
android:repeatMode="reverse" //设置回放的类型,取值:reverse(倒序回放)、restart(重新从头播放).
android:interpolator="@android:anim/accelerate_interpolator"//插值器,指定动作的效果

1.scale缩放动画

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0" //开始时x方向上相对于自身的缩放比例,浮点值,例如:1.0表示原始大小,0.5表示原来的一半
    android:toXScale="2.0" //结束时x方向上相对于自身缩放比例
    android:fromYScale="0.0" //开始时y方向上相对于自身的缩放比例
    android:toYScale="2.0" //结束时y方向上相对于自身缩放比例
    android:pivotX="50%" //下面详解
    android:pivotY="50%" //下面详解
 />

pivotX 和pivoY的取值有三种形式:数值,百分数,百分数p,都是以控件左上角为坐标原点来计算的,下面详细说明:
pivotX 和pivoY的取值都为0时,动画起始点就是坐标原点
这里写图片描述
(1) pivotX 和pivoY的取值都为数值: 50,表示在坐标原点的基础上在x轴和y轴上分别加50px,作为动画的起始点
这里写图片描述
(2)pivotX 和pivoY的取值都为百分数:50%,表示在坐标原点的基础上在x轴加上自身宽度的50%,在y轴加上自身高度的50%,作为动画的起始点
这里写图片描述
(3)pivotX 和pivoY的取值都为百分数p:50%p,此时取值的基数是父控件,也就是在坐标原点的基础上在x轴加上父控件宽度的50%,在y轴上加上父控件高度的50%,作为动画的起始点
这里写图片描述

2.alpha调节透明度

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0.0" //动画开始时的透明度,0.0表示全透明,1.0表示完全不透明,取值范围:0.0~1.0
    android:toAlpha="1.0"   //动画结束时的透明度,
    />

3.rotate旋转动画

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0" //开始旋转时的角度位置,正值表示顺时针方向度数,负值表示逆时针度数
    android:toDegrees="360" //结束旋转时要转到的角度位置,
    android:pivotX="50"    //取值类型:数值、百分数、百分数p,具体含义与scale中相同
    android:pivotY="50"
    />

4.translate平移动画

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0" //起始点x坐标,取值类型:数值、百分数、百分数p,使用方式同scale中一样,下面的属性也相同
    android:toXDelta="100" //结束点的x坐标
    android:fromYDelta="0" //起始点的y坐标
    android:toYDelta="100" //结束点的y坐标
    />

5.set组合动画

set标签没有自己的属性,它的属性都是从Animation中继承来的,会对set标签下的所有子控件起作用

android:duration="1500" //动画持续时间
android:fillAfter="true" //动画结束时是否保持结束时的状态
android:fillBefore="true" //动画结束时是否还原开始时的状态
android:repeatCount="11"  //重复次数,repeatCount和repeatMode要一起使用才有效果
android:repeatMode="reverse" //设置回放的类型,取值:reverse(倒序回放)、restart(重新从头播放).
android:interpolator="@android:anim/accelerate_interpolator"//插值器,指定动作的效果

例子:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fillAfter="true"
    >
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        />
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50"
        android:pivotY="50"
        />
    <scale
        android:fromXScale="0.5"
        android:toXScale="1.0"
        android:fromYScale="0.5"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        />
    <translate
        android:fromXDelta="0"
        android:toXDelta="100"
        android:fromYDelta="0"
        android:toYDelta="100"
        />
</set>

6.执行动画

调用下面的方法就可以获取到在res/anim中定义的动画文件了

 Animation animation = AnimationUtils.loadAnimation(this,R.anim.set_anim);
 view.startAnimation(animation);

二、Android 的动画在代码中的使用姿势

ScaleAnimation TranslateAnimation RotateAnimation AlphaAnimation继承自Animation,继承的方法与xml中对应:

setDuration(long ) 动画持续时间,单位:毫秒
setFillAfter(boolean) 动画结束时是否保持结束时的状态
setFillBefore(boolean) 动画结束时是否保持开始时的状态
setRepeatCount(int) 设置重复次数
setRepeatMode(int)  设置重复类型,取值RESTART或REVERSE,必须和setRepeatCount()一起使用才有效果
setInterpolator(Interpolator)设置插值器

1.ScaleAnimation

pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT

 public ScaleAnimation(float fromX, float toX, float fromY, float toY)
 public ScaleAnimation(float fromX, float toX, float fromY, float toY,
            float pivotX, float pivotY)
  public ScaleAnimation(float fromX, float toX, float fromY, float toY,
            int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 

 ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f,2.0f,1.0f,2.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

2.AlphaAnimation

AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f,1.0f);

3.RotateAnimation

pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT

 public RotateAnimation(float fromDegrees, float toDegrees)
 public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) 
public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
            int pivotYType, float pivotYValue)
RotateAnimation rotateAnimation = new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

4.TranslateAnimation

pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT

public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
            int fromYType, float fromYValue, int toYType, float toYValue)
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE,100,Animation.ABSOLUTE,0,Animation.ABSOLUTE,100);

5.AnimationSet

public AnimationSet(boolean shareInterpolator) 是否共用一个插值器
public void addAnimation(Animation a) 将Animation添加到AnimationSet中,同时执行动画
### 回答1: 要实现OpenGL机器人走路的动画效果,可以按照以下步骤进行: 1. 设计机器人模型:首先需要设计一个机器人的模型,包括机器人的身体、头部、四肢等部分。可以使用OpenGL的基本图元,如立方体、球体等,组合成机器人的各个部分。 2. 设置骨骼结构:为了实现机器人的复杂运动,需要在机器人模型设置骨骼结构。骨骼可以看作是连接机器人各个部分的虚拟骨架,通过改变骨骼的姿态和旋转角度,可以实现机器人的各种动作。 3. 实现动画控制:通过控制骨骼结构的变化,可以实现机器人的走路动画效果。可以使用插值算法,如线性插值或贝塞尔曲线等,来平滑计算骨骼的运动轨迹。通过改变骨骼的位置、旋转角度等属性,实现机器人的步态和运动。 4. 添加纹理和光照:为了增加机器人模型的真实感,可以给机器人的模型添加纹理和光照效果。可以使用OpenGL的纹理映射功能,给机器人的身体、头部等部分添加适当的纹理。同时,通过设置光源和材质属性,给机器人模型增加光照效果,使其在场景有更好的呈现效果。 5. 渲染和显示:最后,将机器人模型和动画效果渲染到屏幕上显示出来。使用OpenGL的渲染管线,将机器人模型的顶点坐标、纹理坐标等信息传递给图形硬件进行处理,并通过设置投影矩阵、视图矩阵等参数,将机器人的模型正确地显示在屏幕上。 通过以上步骤的实现,就可以在OpenGL实现机器人走路的动画效果。可以通过控制骨骼结构的变化、添加纹理和光照效果等来增加机器人模型的逼真程度,达到更好的视觉效果。 ### 回答2: OpenGL是一个用于图形渲染的跨平台开放式标准库,可以实现机器人走路动画效果。实现该效果的一种方法是通过改变机器人的姿势和位置来模拟走路动作。 首先,需要创建一个3D模型来代表机器人。可以使用OpenGL的3D建模工具,如Blender或Maya,创建机器人的模型并导出为合适的文件格式(如.obj或.blend)。 然后,通过OpenGL的渲染管线进行机器人模型的渲染。这涉及到加载模型文件、创建顶点缓冲对象(VBO)、设置着色器程序、设置视图矩阵和投影矩阵等操作。 接下来,要实现机器人的走路动画效果,可以使用关节(Joint)和动画插值(Interpolation)的技术。通过在关节上设置旋转和平移变换,可以模拟机器人走路的姿势变化。使用动画插值技术,可以平滑地过渡机器人的姿势,使走路看起来更加自然。 在每一帧渲染之前,根据设定的动画时间和步长,计算机器人各个关节的旋转和平移变换。这些变换将应用于机器人的模型矩阵,使其整体姿势更新。 最后,将更新后的机器人模型渲染到屏幕上,形成走路动画效果。 需要注意的是,机器人的走路动画效果还可以通过添加更复杂的动画技术来增强,如IK(Inverse Kinematics,逆运动学)来控制机器人脚部的接触点,以更真实地模拟走路过程姿势变化。 通过使用OpenGL的渲染功能结合适当的动画技术,可以实现机器人走路的动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值