layout animation

LayoutAnimationController

A layout animation controller is used to animated a layout's, or a view group's, children. Each child uses the same animation but for every one of them, the animation starts at a different time.

LayoutAnimationController用于为一个Layout里面的控件或者是Viewgroup的控件设置动画效果的,layout或者ViewGroup的子Veiw都使用同一个动画,但是每一个子Veiw的动画开始的时间是不一样的。同时我们也可以同过相关属性来设置子Veiw之间的这个时间间隔,以达到我们想要的效果。同时还可以,子view通话的播放顺序。我们通过他可以实现非常绚丽的效果.

实现方式


一、用代码实现


代码片段:

ListView  lv = (ListView) rootView.findViewById(R.id.lv);

/**
 * 首先创建一个动画
 */
Animation animation = AnimationUtils.loadAnimation(getActivity(),R.anim.layout_item_animation);

/**
 * 创建一个lyaoutd动画控制器,并将我们定义的animation 传入其构造函数,则此layout动画控制器实例就拿到了我们定义的动画。
 */
LayoutAnimationController layoutAnimationController = new LayoutAnimationController(animation);




/**
 *layout动画控制器的播放模式
 *
 *normal   0     默认
 *reverse  1    倒序
 *random   2    随机
 */
layoutAnimationController.setOrder(LayoutAnimationController.ORDER_RANDOM);


/**
 * 设置子view之间动画的延迟时间,这个延迟时间为设置的这个值乘以动画的时常得到,
 * 比如:我们这里设置为0.3 ,假设动画设置的android:duration="500"
 * 则这个延迟时间为 0.3 *500 =150毫秒
 */
layoutAnimationController.setDelay(0.3f);

/**
 * 将我们设置好的布局控制器,然后再layout初始化的时候就会播放该动画
 */
lv.setLayoutAnimation(layoutAnimationController);


一、用xml实现



1.在res/anim/下创建一个xxx.xml文件,我这里取名layout_test_animation.xml


    <layoutAnimation />对应的是一个


<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/layot_animation_set"
android:animationOrder="reverse"
android:delay="50%"

    >

<!--android:delay  view动画时间间隔 (延迟)   70% 也可以是一个浮点数 如“1.2”等 这个值乘以动画的播放时间就得到延迟的时间
    android:animationOrder="random"   view的显示方式 random表示随机
    android:animationOrder 的取值有
    normal 0     默认
    reverse    1    倒序
    random 2    随机
    android:animation="@anim/layot_animation_set" 表示孩子显示时的具体动画是什么
   android:repeatCount="infinite" 重复次数 -->

</layoutAnimation>

接着定义我们的animation文件layot_animation_set.xml 如果是当个动画也可不用<set />标签,直接用当个动画的标签即可。


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

    <alpha
        android:duration="400"
        android:fromAlpha="0.2"
        android:toAlpha="1.0">
        <!--fromAlpha属性为动画起始时透明度
            toAlpha    属性为动画结束时透明度
            0.0表示完全透明
            1.0表示完全不透明
            以上值取0.0-1.0之间的float数据类型的数字-->
    </alpha>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromXDelta="0"
        android:fromYDelta="-100%p"
        android:toXDelta="0"
        android:duration="550"
        android:toYDelta="0">

        <!--此处的单位可以是具体的设定为某个值(任意值都可以),也可以可以用百分比,用百分比时,不带p是对View自身的百分比,
P是相对父类的百分比 可以为正数也可以为负数 ,此处组好使用百分比,因为百分比的值在不同的设备上基本一致-->

    </translate>

    <scale
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="400"
        android:toXScale="1.0"
        android:toYScale="1.1">
        <!--

        fromXScale[float] fromYScale[float]    为动画起始时,XY坐标上的伸缩尺寸 0.0表示收缩到没有
        toXScale [float]  toYScale[float]  为动画结束时,XY坐标上的伸缩尺寸
        1.0表示正常无伸缩
        值小于1.0表示收缩
        值大于1.0表示放大
        此处pivotX,pivotY的单位可以是具体的设定为某个值(任意值都可以,以为旋转的中心点可以是任意一点),也可以可以用百分比,用百分比时,不带p是对View自身的百分比,
P是相对父类的百分比 可以为正数也可以为负数 ,此处组好使用百分比,因为百分比的值在不同的设备上基本一致-->
    </scale>

</set>

接着在要使用动画的Layout或者VeiwGroup的xml文件中引用我们定义的<layoutAnimation /> 文件


<ListView
    android:id="@+id/lv"
    android:layout_width="wrap_content"
    android:layoutAnimation="@anim/layout_test_animation"
    android:background="#00ffffff"
    android:dividerHeight="1dp"
    android:divider="@null"
    android:layout_height="wrap_content"
    />

到此我们的Layout animation就设置完成了。


效果:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值