Android GridView分页滑动之item动画讲解

在《Android 仿美团GridView分页滑动,类似直播礼物列表效果》去看看 中提到过GridView动画,在这里针对动画来简单讲解一下

效果图:

 这里主要来说说上图的动画,使用XML和几句代码实现的一个效果(这个效果是我在淘宝的一个斐乐官方店铺看到的)

Property Animation(属性动画) Android属性动画之ValueAnimator、Android属性动画之ObjectAnimator、AnimatorSet,Frame Animation(逐帧动画)、Tween Animation (补间动画)、GIF/WebP动画图片、现在主流的动画播放框架主要有Lottie,SVGA

等等就一笔带过了,安卓的动画数不胜数,这里只做针对性的讲解。

1.主函数中的代码:

  GridView gridView = (GridView) inflater.inflate(R.layout.gridview_layout,viewPager,false);
            //

            Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.in_from_right);
            myAnim.setFillAfter(true);//android动画结束后停在结束位置

            AnimationSet set = new AnimationSet(false);
            set.addAnimation(myAnim);    //加入动画集合
//            Animation animation = new AlphaAnimation(0,1);   //AlphaAnimation 控制渐变透明的动画效果
//            animation.setDuration(500);     //动画时间毫秒数
//            set.addAnimation(animation);    //加入动画集合
//
//            animation = new TranslateAnimation(1, 13, 10, 50);  //ScaleAnimation 控制尺寸伸缩的动画效果
//            animation.setDuration(300);
//            set.addAnimation(animation);
//
//            animation = new RotateAnimation(30,10);    //TranslateAnimation  控制画面平移的动画效果
//            animation.setDuration(300);
//            set.addAnimation(animation);
//
//            animation = new ScaleAnimation(5,0,2,0);    //RotateAnimation  控制画面角度变化的动画效果
//            animation.setDuration(300);
//            set.addAnimation(animation);

            LayoutAnimationController controller = new LayoutAnimationController(set, 1);
            //
            gridView.setLayoutAnimation(controller);//GridView 设置动画效果
            gridView.setAdapter(new MyGridViewAdapter(this,listDatas,i,mPageSize));

动画代码就不多说了,ListView和GridView添加动画是一样的,调用setLayoutAnimation方法即可,来看看anim中的xml部分:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromXDelta="100%p"
    android:interpolator="@android:anim/overshoot_interpolator"
    android:toXDelta="0%p" >
    <!--    in_from_right.xml(从右边进入动画)-->
</translate>

这里除了自己设置平移、缩放、旋转、透明,还可以结合相应的动画插值器来现在一些酷炫灵动的效果。

animator的属性:

android:duration:每次动画播放的时长
android:valueFrom:初始动化值;取值范围为float,int和color,如果取值为float对应的值样式应该为89.0,取值为Int时,对应的值样式为:89;当取值为clolor时,对应的值样式为 #333333;
android:valueTo:动画结束值;取值范围同样是float,int和color这三种类型的值;
android:startOffset:动画激活延时;对应代码中的startDelay(long delay)函数;
android:repeatCount:动画重复次数
android:repeatMode:动画重复模式,取值为repeat和reverse;repeat表示正序重播,reverse表示倒序重播
android:valueType:表示参数值类型,取值为intType和floatType;与android:valueFrom、android:valueTo相对应。如果这里的取值为intType,那么android:valueFrom、android:valueTo的值也就要对应的是int类型的数值。如果这里的数值是floatType,那么android:valueFrom、android:valueTo的值也要对应的设置为float类型的值。非常注意的是,如果android:valueFrom、android:valueTo的值设置为color类型的值,那么不需要设置这个参数;
android:interpolator:设置插值器;

objectAnimator的属性:

android:propertyName:对应属性名,即ObjectAnimator所需要操作的属性名。
其它字段的意义与animator的意义与取值是一样的,下面再重新列举一下。
- android:duration:每次动画播放的时长
- android:valueFrom:初始动化值;取值范围为float,int和color;
- android:valueTo:动画结束值;取值范围同样是float,int和color这三种类型的值;
- android:startOffset:动画激活延时;对应代码中的startDelay(long delay)函数;
- android:repeatCount:动画重复次数
- android:repeatMode:动画重复模式,取值为repeat和reverse;repeat表示正序重播,reverse表示倒序重播
- android:valueType:表示参数值类型,取值为intType和floatType;与android:valueFrom、android:valueTo相对应。如果这里的取值为intType,那么android:valueFrom、android:valueTo的值也就要对应的是int类型的数值。如果这里的数值是floatType,那么android:valueFrom、android:valueTo的值也要对应的设置为float类型的值。非常注意的是,如果android:valueFrom、android:valueTo的值设置为color类型的值,那么不需要设置这个参数;
- android:interpolator:设置插值器;
android:interpolator="@android:anim/overshoot_interpolator"

 Interpolator 时间插值类,定义动画变换的速度。能够实现alpha/scale/translate/rotate动画的加速、减速和重复等。Interpolator类其实是一个空接口,继承自TimeInterpolator,TimeInterpolator时间插值器允许动画进行非线性运动变换,如加速和限速等,该接口中只有接口中有一个方法 float getInterpolation(float input)这个方法。传入的值是一个0.0~1.0的值,返回值可以小于0.0也可以大于1.0。

android:interpolator  主要控制动画播放的类型。android默认的类型有如下几种:
AccelerateDecelerateInterpolator
@android:anim/accelerate_decelerate_interpolator    在动画开始与结束的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator
@android:anim/accelerate_interpolator    在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator
@android:anim/anticipate_interpolator    开始的时候向后然后向前甩
AnticipateOvershootInterpolator
@android:anim/anticipate_overshoot_interpolator    开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator
@android:anim/bounce_interpolator    动画结束的时候弹起
CycleInterpolator
@android:anim/cycle_interpolator    动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator
@android:anim/decelerate_interpolator    在动画开始的地方快然后慢
LinearInterpolator
@android:anim/linear_interpolator    以常量速率改变
OvershootInterpolator
@android:anim/overshoot_interpolator    向前甩一定值后再回到原来位置

android:shareInterpolator  取值为true的时候,表示设置的interpolator同样适用于所有子元素。
android:pivotX和android:pivotY表示中心点,中心轴。比如旋转中心点或者缩放的中心点。
alpha的属性from和to的取值范围是0.0到1.0。
scale的属性from和to的取值如果是1.0则表示大小不变,<1.0表示缩小,>1.0表示放大。
translate的属性from和to的取值可以是数值或者百分比,数值:比如30,表示移动的30个像素的距离;百分比,比如50%,表示相对于父容器的长宽的百分比。
rotate的属性from和to表示旋转的角度,单位是度。取值从0度到360度,其中android:pivotX和android:pivotY的取值可以是具体数值(相对于父容器top和left的距离值)或者百分比(相对于父容器长宽的百分比)。
 

AccelerateDecelerateInterpolator============动画开始与结束的地方速率改变比较慢,在中间的时候加速。
AccelerateInterpolator===================动画开始的地方速率改变比较慢,然后开始加速。 
AnticipateInterpolator ==================开始的时候向后然后向前甩。
AnticipateOvershootInterpolator=============开始的时候向后然后向前甩一定值后返回最后的值。
BounceInterpolator=====================动画结束的时候弹起。
CycleInterpolator======================动画循环播放特定的次数,速率改变沿着正弦曲线。
DecelerateInterpolator===================在动画开始的地方快然后慢。
LinearInterpolator======================以常量速率改变。
OvershootInterpolator====================向前甩一定值后再回到原来位置。
PathInterpolator========================新增的,就是可以定义路径坐标,然后可以按照路径坐标来跑动;注意其坐标并不是 XY,而是单方向,也就是我可以从0~1,然后弹回0.5 然后又弹到0.7 有到0.3,直到最后时间结束

参考:xml动画

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值