android属性动画的两种放是,android之动画实现(一)(四种基本补间动画)

android动画有补间动画也有属性动画,还有布局动画等。今天就先从简单的四种基本补间动画说起。

补间动画有:平移,缩放,旋转,透明。使用方式有两种:xml和java代码。

四种动画的共同属性说明:

android:fillAfter 表示动画结束后是否停留在最后一帧,即停在结束位置;

android:duration表示动画的持续时间;

android:interpolator表示动画的运行规律(插值器),比如先快后慢或者先慢后快等;

android:repeatCount 表示重复次数,默认值是0,代表重复1次;如果值是repeatCount=n代表重复 n+1次;值为-1或者infinite时,表示补间动画永不停止;

android:repeatMode 设置重复的模式,默认是restart,当repeatCount的值大于0或者为-1或infinite时才有效:

1.如果是:restart,表示每次执行完都会从头开始;

2.如果是:reverse,表示第一次从头开始,第二次反过来,第三次从头开始,第四次反过来,即偶数次是反着的;

3.举例说明,从位置A平移到B:

a.如果是restart,那么每次都是A-B,瞬间回到A然后又A-B,不断重复;

b.如果是reverse,那么第一次是A-B,第二次是B-A,第三次是A-B,第四次是B-A,这样循环下去,结果是就是来回移动了;

四种补间动画单独说明:

一.平移动画TranslateAnimation

1.XML实现方式(res/anim,没有此文件夹自己建立):

android:duration="1000"

android:fromXDelta="0"

android:fromYDelta="0"

android:repeatCount="infinite"

android:repeatMode="reverse"

android:toXDelta="50%p"/>

使用:

Animation tran = AnimationUtils.loadAnimation(this,R.anim.translate);

translate.startAnimation(tran);

属性说明:

android:fromXDelta,平移的起点x方向坐标(android:toXDelta和Y方向的同理):

1.如果值是数值类型,即20或者25.0之类的,譬如50表示以当前View左上角坐标加50px为初始点;

2.如果值是百分比类型,即20%或者50%之类的,50%表示以当前View的左上角加上当前View宽高的50%做为初始点;

3.如果是父值的类型,即-100%p或者100%p之类的,50%p表示以当前View的左上角加上父控件宽高的50%做为初始点;

2.代码实现方式:

Animation tran1 = new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,1,Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,0);

tran1.setDuration(2000);

translate.startAnimation(tran1);

8个参数依次:起点x的坐标参照,起点x的坐标值,终点x的坐标参照,终点x的坐标值,起点y的坐标参照,起点y的坐标值,终点y的坐标参照,终点y的坐标值;

坐标参照是用来设置位置的,比如:

RELATIVE_TO_PARENT(XML中父值的类型):相当于用XML时的“android:toXDelta=”50%p”中的p,表示以父控件为参照,1代表100%p,0.5代表50%p,Y方向同理;

RELATIVE_TO_SELF(XML中百分比类型):相当于XML时的“android:toXDelta=”50%”,以自身为参照,1相当于XML中的100%,0.5相当于XML中的50%,Y方向同理;

ABSOLUTE(XML中数值类型):相当于XML中的“android:toXDelta=”50”;

即三种参数其实跟XML中的使用方式是对应的,如果不懂看XML方式来理解就懂了。

如果在代码中不写坐标参照即只有4个参数值,默认是ABSOLUTE方式。

二:缩放动画

1.XML实现方式:

android:duration="1000"

android:fromXScale="1.0"

android:fromYScale="1.0"

android:pivotX="50%"

android:pivotY="50%"

android:repeatCount="infinite"

android:repeatMode="reverse"

android:toXScale="50%p"

android:toYScale="50%p" />

使用:

Animation scaleAn = AnimationUtils.loadAnimation(this,R.anim.scale);

scale.startAnimation(scaleAn);

android:fromXScale,缩放开始时的x方向大小;

android:toXScale,缩放开始时的y方向大小;

android:pivotX,缩放的中心的x坐标(即以某个点为中心进行缩放);

以上3个属性y方向的同理。

android:fromXScale和android:toXScale,还有Y方向的属性值也有三种形式(以android:fromXScale举例):

1.如果值是数值类型,即1或者2之类的表示缩放动画开始时的宽是自身宽的1或者2倍;

2.如果值是百分比类型,即20%或者50%之类的,表示缩放动画开始时的宽是自身宽的20%或者50%;

3.如果是父值类型,即50%p或者100%p之类的,表示缩放动画开始时的宽是父控件宽的50%或者100%;

android:pivotX的属性值有两种形式:

1.如果值是百分比类型,即20%或者50%之类的,表示缩放的中心点x坐标在自身左上角坐标+自身宽度的20%或者50%处;

2.如果是父值类型,即50%p或者100%p之类的,表示缩放的中心点x坐标在自身左上角坐标+父控件宽度的50%或者100%处;

补充:如果是数值类型,比如1或者2,无效,无论是多少,都表示缩放的中心点是自身的左上角。

2.代码实现方式:

Animation scale1 = new ScaleAnimation(1f,0.5f,1f,0.5f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

scale1.setDuration(2000);

scale.startAnimation(scale1);

8个参数依次:起始宽度,结束宽度,缩放起始高度,结束高度,缩放中心点x方向的坐标参照,缩放中心点的x坐标,缩放中心点y方向的坐标参照,缩放中心点的y坐标;

前4个参数只能是float格式,效果都是自身宽高的倍数,比如例子中表示,起始宽度是自身宽度1倍,结束宽度是自身一半;

后面4个参数中三种写法:

Animation.RELATIVE_TO_PARENT,0.5f,Animation.RELATIVE_TO_PARENT,0.5f,表示中心点是自身左上角坐标+父控件宽高的一半;

Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f,表示中心点是自身左上角坐标+自身宽高的一半;

Animation.ABSOLUTE,100,Animation.ABSOLUTE,100,表示中心点是自身左上角坐标+100;

三.透明动画

1.XML实现方式:

android:duration="1000"

android:fromAlpha="1"

android:repeatCount="-1"

android:repeatMode="reverse"

android:toAlpha="0.5">

alpha>

android:fromAlpha和android:toAlpha分别表示开始和结束时的透明度,值只有一种格式,0-1之间的数,1表示不透明,0表示完全透明,这个比较简单。

2.代码中设置:

Animation alpha1 = new AlphaAnimation(1,0);

alpha1.setDuration(2000);

alpha.startAnimation(alpha1);

透明动画比较简单,两个参数,一个是开始的透明度,一个是结束的透明度,值与在XML中写的格式相同。

四,旋转动画

1.XML实现方式:

android:duration="1000"

android:fromDegrees="0"

android:pivotX="50%"

android:pivotY="50%"

android:repeatCount="infinite"

android:repeatMode="reverse"

android:toDegrees="-90">rotate>

android:fromDegrees和android:toDegrees分别表示起始和结束的角度,值只能是一种格式,数值类型,可以说int也可以是float,代表角度。

2.代码实现方式:

Animation rotateAn = new RotateAnimation(90,-90,Animation.ABSOLUTE,100,Animation.ABSOLUTE,100);

rotate.startAnimation(rotateAn);

前两个参数表示开始角度和结束角度,没啥好说的。

后面4个参数中三种写法:

Animation.RELATIVE_TO_PARENT,0.5f,Animation.RELATIVE_TO_PARENT,0.5f,表示旋转中心点是自身左上角坐标+父控件宽高的一半;

Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f,表示旋转中心点是自身左上角坐标+自身宽高的一半;

Animation.ABSOLUTE,100,Animation.ABSOLUTE,100,表示旋转中心点是自身左上角坐标+100;

最后,汇总:上面四种动画都是单独使用的,我们如果想混合使用,比如变大的同时变透明,那就得组合动画了,组合动画也是一样的可以XML也可以代码写:

1.XML实现方式:

android:fillAfter="true"

android:interpolator="@android:anim/cycle_interpolator"

android:shareInterpolator="true">

android:fromXDelta="0"

android:fromYDelta="0"

android:toXDelta="50%p"

android:toYDelta="0" />

android:fromAlpha="1"

android:repeatCount="1"

android:repeatMode="reverse"

android:toAlpha="0.5" />

android:fromYScale="0.5"

android:pivotX="50%"

android:pivotY="50%"

android:repeatCount="1"

android:repeatMode="reverse"

android:toXScale="0.5"

android:toYScale="0.5" />

set>

android:shareInterpolator表示set标签下的多个动画共用一个插值器,如果不需要,那就单独设置插值器。

2.代码中设置:

AnimationSet animationSet = new AnimationSet(true);//共享插值器

animationSet.addAnimation(scale);

animationSet.addAnimation(alpha);

animationSet.addAnimation(rotate);

animationSet.addAnimation(translate);

view.startAnimation(animationSet);

很简单,用set将各个单独的动画加进去,然后start就行了。

四种基本补间动画基本说完了,还是很简单的,不过它并不完美,比如如果一个按钮设置了点击事件,然后你平移了它,此时你点击新的位置的它,是不会有反应的,因为它还在原来的位置,只是我们肉眼看着它移走了,实际上它还是没动的,所以此时就需要属性动画了,属性动画在后面会再补上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
补间动画(Tween Animation)和属性动画(Property Animation)是 Android 中常用的两种动画方式,它们在实现方式和效果上有一些区别。 1. 实现方式: - 补间动画补间动画是通过对目标对象的某些属性进行线性插值计算,然后逐步改变这些属性的值来实现动画效果。常见的补间动画包括平移、缩放、旋转和透明度变化等。 - 属性动画属性动画是通过改变对象的属性值来实现动画效果。它可以直接对任意对象的属性进行动画操作,不限于预定义的属性,可以实现更灵活的动画效果。 2. 支持的属性: - 补间动画补间动画只能对指定的属性进行动画操作,且只能是一些预定义的属性,如平移动画只能对 View 的位置属性进行操作。 - 属性动画属性动画可以对任意对象的任意属性进行动画操作,只要该属性有相应的 setter 方法。 3. 效率: - 补间动画补间动画在执行过程中会产生大量的中间帧,需要频繁地重新计算和渲染,可能会造成性能上的开销。 - 属性动画属性动画使用了插值器和估值器来计算动画过程中每一帧的属性值,能够更精确地控制动画效果,性能较好。 综上所述,属性动画实现方式和灵活性上优于补间动画,且能够更好地控制动画效果。虽然属性动画可能稍微消耗更多的性能,但在大多数情况下,两者的差异不会对性能产生显著影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值