android 动画

动画分三种,view动画,帧动画,属性动画,(帧动画也是view动画的一种)。

    view动画:通过对view进行不断的图像变换(平移,缩放,旋转,透明度)从而产生动画
    帧动画:通过顺序播放一系列图像产生动画效果。
    属性动画:通过动态改变对象的属性达到动画效果。

view 动画 (平移,缩放,旋转, 透明度)

   view四种动画对应着Animation的四个子类,TranslateAnimation ScaleAnimation RotateAnimation AlphaAnimation
        四种动画可以通过xml定义也可用Java代码定义,推荐使用xml。
       xml定义的动画既可以是单个的也可以是多个组合的。

1:xml定义view动画。

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="0.1"  开始时透明度
        android:toAlpha="1"   结束时透明度
        android:duration="5000"  动画持续时间。
        ></alpha>
    <scale
        android:fromXScale="0.0"    动画开始前x的缩放比例,
        android:toXScale="1"        动画结束x的缩放比例
        android:fromYScale="0.0"
        android:toYScale="1"
        android:pivotX="50%"      动画起始位置相对于屏幕的百分比,50%表示中间
        android:pivotY="50%"
        android:duration="5000" ></scale>
    <rotate
        android:fromDegrees="0"     动画开始的角度
        android:toDegrees="-360"    动画结束时物件的旋转角度,正代表顺时针
        android:pivotX="50%"        属性为动画相对于物件的X的坐标的开始位置
        android:pivotY="50%"  属性为动画相对于物件的Y坐标的开始位置
        android:startOffset="5000"  动画延迟多少时间开始执行。
        android:duration="5000"></rotate>
    <translate
        android:fromXDelta="0"     起始时X的坐标
        android:toXDelta="300"    结束时X的坐标
        android:fromYDelta="0"
        android:toYDelta="400"
        android:startOffset="10000"
        android:duration="5000" />
</set>

2: 动画添加到view上使用。

   Button button = findViewById(R.id.button);
   Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation_button);
   button.startAnimation(animation);

3:为动画添加监听

      setAnimationListener 有开始 结束 重复动画、

4:动画的共同属性

  Duration ; 动画的持续时间(毫秒)
  fillAfter:设置为TRUE,动画转化在动画结束后被应用。
  fillBefore:设置为TRUE,动画转化在动画开始前被应用。
  interpolator:动画插入器(加速、减速插入器)
  repeatCount:动画重复次数
  repateMode :顺序重复/倒叙重复
  startOffset : 动画之间的时间间隔。

view自定义动画:难点在于矩阵的运算 这里不做详细描述。

1:继承Animation抽象类,重写initialize和ApplyTransFormation
    initialize用于初始化工作, applyTransFormation用于矩阵运算,

逐帧动画:

 这个动画属于drawable资源,应该用xml在drawable中定义,

1:利用XML文件

AnimationDrawable drawable = (AnimationDrawable) getResources().getDrawable(R.drawable.animation_list);
imageView.setBackgroundDrawable(drawable);
drawable.start();

2:全部利用Java代码

AnimationDrawable frameAnim = new AnimationDrawable();
frameAnim.addFrame(getResources().getDrawable(R.drawable.img0), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img1), 50);
frameAnim.setOneShot(false);
imageView.setBackgroundDrawable(frameAnim);
frameAnim.start();

注:注意动画参数的数值

animation.setFillAfter(True); 设置完后view将不再能隐藏,保持再最后的位置及状态。

下面给大家介绍一种方法,
refuseround.clearAnimation();
refuseround.invalidate();
用上面两条语句来解决, 我以前以为用clearAnimation就可以了, 但是不然
如果你不用invalidate()来刷 新view的话, 你的界面会停留在放大后的界面

动画的特殊使用场景 viewGroup 和 Activity

viewGroup:可控制子元素的出场效果。 LayoutAnimation:常用在listview上,控制item

1:定义xml文件

anim_layout.xml
    <layoutAnimation
        android:delay = "0.5"    <!--子元素开始动画的时间延迟,-->
        android:animationOrder = "normal"    <!--子元素动画顺序, normal(顺序) reverse(倒序) random(随机)-->
        android:animation = "@anim/anim_item"  <!--子元素动画-->
    />

2:在viewGroup中使用

<ListView            
        android:layoutAnimation="@anim/anim_layout" 
 />

3:java代码的实现通过LayoutAnimationController来实现

    Animation animation = AnimationUtil.loadAnimation(this, R.layout.anim_item);
    LayoutAnimationController controller = new LayoutANimationController(animation);
    controller.setDelay(0.5f);
    controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
    listview.setLayoutAnimaton(controller)

Actiity的切换效果:

activity有默认的切换效果,这个效果我们可以自定义,主要用到overridePendingTransition(int enterAnim, int exitAnim)
    这个方法必须在startActivity和finish之后被调用才有效。
        enterAnim  activity被打开时的动画    exitAnim  activity被暂停时的动画,

    Fragment切换也可以有动画

属性动画:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值