Android 动画学习记录(一)

View anim

主要有四种:缩放,平移,渐变,旋转

文件位置:res/anim/filename.xml

资源引用:

Java:R.anim.filename

XMl:@[package:]anim/filename

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
	<set xmlns:android="http://schemas.android.com/apk/res/android"
	    android:interpolator="@[package:]anim/interpolator_resource"
	    android:shareInterpolator=["true" | "false"] >
	    <alpha
		android:fromAlpha="float"
		android:toAlpha="float" />
	    <scale
		android:fromXScale="float"
		android:toXScale="float"
		android:fromYScale="float"
		android:toYScale="float"
		android:pivotX="float"
		android:pivotY="float" />
	    <translate
		android:fromXDelta="float"
		android:toXDelta="float"
		android:fromYDelta="float"
		android:toYDelta="float" />
	    <rotate
		android:fromDegrees="float"
		android:toDegrees="float"
		android:pivotX="float"
		android:pivotY="float" />
	    <set>
		...
	    </set>
	</set>

布局文件必须有一个独立的根元素

可以使,alpa,translate,rotate,scale 或者set,set是几种效果的集合,也可以内嵌set元素

属性

android:interpolator(插值器)

用于修改一个动画过程中的速率,可以定义各种各样的非线性变化函数,比如加速、减速等。
在Android中所有的插值器都是Interpolator 的子类,通过 android:interpolator 属性你可以引用不同的插值器。下面是几种插值器:

你可以通过下面的方式使用它们

1
2
3
<set android:interpolator="@android:anim/accelerate_interpolator">
	    ...
</set>

android:shareInterpolator
Boolean值, true:代表在所有的子元素中共享同一个插值器

android:startOffset

动画开始的偏移时间。如果没有设置,所有动画同时进行

A fade-in or fade-out animation. Represents an AlphaAnimation.
一个渐入渐出的动画,对应的java类为AlphaAnimation。
属性
android:fromAlpha
android:toAlpha
代表动画开始和结束时透明度,0.0表示完全透明,1.0表示完全不透明,Float值

可以实现动态调控件尺寸的效果,通过设置pivotX和pivotY你可以指定image缩放的中心点,比如:如果这些值是0,则表示左上角,所有的缩放变化将沿着右下角的轨迹运动。对应的类为:ScaleAnimation
属性:
android:fromXScale
android:toXScale
android:fromYScale
android:toYScale
Float值,为动画起始到结束时,X、Y坐标上的伸缩尺寸
0.0表示收缩到没有
1.0表示正常无伸缩

android:pivotX
android:pivotY
代表缩放的中轴点X/Y坐标,浮点值
如果我们想表示中轴点为图像的中心,我们可以把两个属性值定义成0.5或者50%。

代表一个水平、垂直的位移。对应的类为TranslateAnimation.
属性
android:fromXDelta 属性代表起始X方向的位置
android:toXDelta
android:fromYDelta
android:toYDelta

代表动画起始或者结束X / Y方向上的位置,Float或者百分比值
浮点数num%、num%p分别相对于自身或者父控件
如果以浮点数字表示,是一个绝对值,代表相对自身原始位置的像素值;
如果以num%表示,代表相对于自己的百分比,比如toXDelta定义为100%就表示在X方向上移动自己的1倍距离
如果以num%p表示,代表相对于父类组件的百分比。

是旋转动画,与之对应的Java类是RotateAnimation。

属性
android:fromDegrees
android:toDegrees
代表起始和结束的角度,浮点值,单位:度

android:pivotX 属性代表旋转中心的X坐标值
android:pivotY 属性代表旋转中心的Y坐标值
Float值或者百分比
这两个属性也有三种表示方式,但是X轴都是相对方向都是Left,Y轴都是相对于Top
浮点数、num%、num%p;
数字方式代表相对于自身左边缘的像素值,
num%方式代表相对于自身左边缘或顶边缘的百分比,
num%p方式代表相对于父容器的左边缘或顶边缘的百分比。

属性:
android:fromDegrees
android:toDegrees
开始和结束时的弧度位置,单位是度,Float值

调用代码

1
2
3
ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);

另外,在动画中,如果我们添加了android:fillAfter=”true”后,这个动画执行完之后保持最后的状态;android:duration=”integer”代表动画持续的时间,单位为毫秒。

附上调试的简单动画

从原有位置向左下角移动,然后移动到右边,在回到原始位置

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <set android:duration="1000">
        <translate
            android:fromXDelta="0%"
            android:toXDelta="-100%" />
        <translate
            android:fromYDelta="0%"
            android:toYDelta="100%" />
    </set>
    <set android:duration="1000"
        android:startOffset="1000">
        <translate
            android:fromXDelta="0%"
            android:toXDelta="200%" />
    </set>
    <set android:duration="1000"
        android:startOffset="2000">
        <translate
            android:fromXDelta="0%"
            android:toXDelta="-100%" />
        <translate
            android:fromYDelta="0%"
            android:toYDelta="-100%" />
    </set>
</set>
简单的渐变效果,从透明变化到不透明
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">

    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="1000"
        />
</set>
基于中心点旋转。repeatCount = -1 表示循环旋转,可以通过clearAnimation();停止动画
repeatMode 标示重复方式,restart 和reverse 一个表示重新开始,一个是反着来。只有在repeatCount 大于1或者-1 生效
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:repeatMode="restart">

    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:repeatCount="-1"
        android:duration="1000"
        android:zAdjustment="top"
        android:pivotY="50%"
        android:pivotX="50%"/>
</set>


参考文章:http://www.lightskystreet.com/2014/12/03/view-and-property-anim-knowldege-and-compare/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值