Android动画使用总结(待完善)

    xiaoxiao2022-06-29  36

    一、view动画 1、指定关键帧,通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度),可以自定义 TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation四个Animation的子类分别对应平移、缩放、旋转、透明度四种动画 名称标签子类效果平移动画<translate>TranslateAnimation移动view缩放动画<scale>ScaleAnimation放大、缩小旋转动画<rotate>RotateAnimation旋转view透明度动画<alpha>AlphaAnimation改变view的透明度 2、AnimationSet动画集合类对应标签<set>  </set> android:interpoltor 指定插值器 android:shareInterpolator = ["true" | "false"] set中的动画是否共用 android:interpoltor指定的插值器 3、在res/anim中定义相应的view动画 二、帧动画(也属于view动画) 顺序播放一系列图像,可以理解为图片的切换(如果图片过多、过大就容易造成OOM) 由AnimationDrawable类控制,对应便签<animation-list>,如下(在drawable下创建): <animation-listxmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <itemandroid:drawable="@android:drawable/dark_header"android:duration="100"/> <itemandroid:drawable="@android:drawable/ic_menu_week"android:duration="200"/> <itemandroid:drawable="@android:drawable/edit_text"android:duration="100"/> </animation-list> 当成drawable来用就行了 三、属性动画 1、通过动态地改变对象的属性达到动画的效果(API 11) 2、主要有ValueAnimation、ObjectAnimation、AnimatorSet三个比较常用的类 其中ObjectAnimation继承自ValueAnimation(ObjectAnimation多了一个对于View属性的定义) 3、属性动画的一般用法 ObjectAnimation: objectAnimator . ofFloat (button , "translationY" , - button.getHeight()).start() ; ValueAnimation(没有对View的属性进行设置): ValueAnimator valueAnimator = ValueAnimator.ofInt(1,100); valueAnimator.addUpdateListener(newAnimatorUpdateListener() { // 持有一个IntEvaluator对象,方便下面估值的时候使用 privateIntEvaluatormEvaluator=newIntEvaluator(); @Override public voidonAnimationUpdate(ValueAnimator animator) { // 获得当前动画的进度值,整型,1-100之间 intcurrentValue = (Integer) animator.getAnimatedValue(); Log.d(TAG,"current value: "+ currentValue); // 获得当前进度占整个动画过程的比例,浮点型,0-1之间 floatfraction = animator.getAnimatedFraction(); // 直接调用整型估值器通过比例计算出宽度,然后再设给Button target.getLayoutParams().width=mEvaluator.evaluate(fraction,start,end); target.requestLayout(); } }); 4、也可以通过xml定义属性动画,在res/animator中定义相应的view动画 标签对应的类<set>AnimatorSet<animator>ValueAnimation<objectAnimator>ObjectAnimation 5、通过 valueAnimation.setInterpolator()valueAnimation.setEvaluator()可以分别对插值器、估值器进行设置 插值器:根据时间的流逝的百分比来计算出当前属性值改变的百分比(真正影响动画的效果) 估值器:根据当前属性改变的百分比来计算改变后的属性值(有IntEvaluator、FloatEvaluetor、ArgbEvaluator分别针对整型属性、浮点型属性、Color属性) 注意: 1、view动画用在ViewGroup中可以控制子元素的出场效果,用在Activity中可以实现不同Activity之间的切换效果 2、属性动画最好用代码来实现,相对会比较简洁,另外很多时候一个属性的起始值是无法提前确定的,在xml文件中无法给出一个准确值 3、ValueAnimation属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次调用set方法 4、属性动画中有一类无限循环的动画,需要在Activity退出时及时停止, objectAnimator .cancel() ;,否则会造成内存泄露 5、对于View动画可能会产生setVisibility(View.GONE)也无法隐藏的现象,这时候要先调用view.clearAnimation() 
    转载请注明原文地址: https://ju.6miu.com/read-1125257.html

    最新回复(0)