android 帧动画

原创 2016年08月28日 21:46:38
Android animation动画有四种类型,


alph 渐变透明度
scale 渐变尺寸伸缩
translate  画面转换位置移动
rotate 画面转移旋转


对应的java代码中
AlphaAnimation 渐变透明度
ScaleAnimation 渐变尺寸伸缩
TranslateAnimation 画面转换位置移动
RotateAnimation 画面转移旋转


在xml里面可以使用类似布局的玩意书写
透明动画是四类动画中最简单的一个


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <!--
     透明度控制动画效果 alpha
        浮点型值:
            fromAlpha 属性为动画起始时透明度
            toAlpha   属性为动画结束时透明度
            说明: 
                0.0表示完全透明
                1.0表示完全不透明
            以上值取0.0-1.0之间的float数据类型的数字
        长整型值:
            duration  属性为动画持续时间
            说明:     
                时间以毫秒为单位
    -->
</set>


Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha_anim);
view.startAnimation(animation);






剩下的动画中伸缩和旋转有异曲同工之妙


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


    <scale
        android:duration="1000"
        android:fillAfter="false"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.4"
        android:toYScale="1.4" />


</set><!--
     尺寸伸缩动画效果 scale
       属性:interpolator 指定一个动画的插入器
        在我试验过程中,使用android.res.anim中的资源时候发现
        有三种动画插入器:
            accelerate_decelerate_interpolator  加速-减速 动画插入器
            accelerate_interpolator        加速-动画插入器
            decelerate_interpolator        减速- 动画插入器
        其他的属于特定的动画效果
      浮点型值:
            fromXScale 属性为动画起始时 X坐标上的伸缩尺寸    
            toXScale   属性为动画结束时 X坐标上的伸缩尺寸     
        
            fromYScale 属性为动画起始时Y坐标上的伸缩尺寸    
            toYScale   属性为动画结束时Y坐标上的伸缩尺寸    
            说明:
                 以上四种属性值    
    
                    0.0表示收缩到没有 
                    1.0表示正常无伸缩     
                    值小于1.0表示收缩  
                    值大于1.0表示放大   
            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置 
            说明:
                    以上两个属性值 从0%-100%中取值
                    50%为物件的X或Y方向坐标上的中点位置  
        长整型值:
            duration  属性为动画持续时间
            说明:   时间以毫秒为单位


        布尔型值:
            fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
-->
ScaleAnimation(float fromX, float toX, float fromY, float toY,
           int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 


fromX为动画起始时 X坐标上的伸缩尺寸    
toX为动画结束时 X坐标上的伸缩尺寸     
fromY为动画起始时Y坐标上的伸缩尺寸    
toY为动画结束时Y坐标上的伸缩尺寸  




pivotXType为动画在X轴相对于物件位置类型  
pivotXValue为动画相对于物件的X坐标的开始位置
pivotXType为动画在Y轴相对于物件位置类型   
pivotYValue为动画相对于物件的Y坐标的开始位置




前面四个参数好理解,关键是后面四个,
type的类型有三种
 public static final int ABSOLUTE = 0;


    /**
     * The specified dimension holds a float and should be multiplied by the
     * height or width of the object being animated.
     */
    public static final int RELATIVE_TO_SELF = 1;


    /**
     * The specified dimension holds a float and should be multiplied by the
     * height or width of the parent of the object being animated.
     */
    public static final int RELATIVE_TO_PARENT = 2;


ABSOLUTE 指的是相对屏幕;RELATIVE_TO_SELF 指的是自身;RELATIVE_TO_PARENT 指的是相


对父容器。


比如又一个控件ImageView,想让他缩放扩大效果,是想让他以哪个点为基准来缩放,就有后


面四个参数分别控制x轴和y轴。
pivotXType为参照类型,pivotXValue为百分比,
比如上述ImageView在布局中,想扩大到全屏,如果在屏幕上随意一个位置,该如何计算缩放


点呢?
首先要以屏幕为type,其次x轴计算缩放点,就是该控件距离屏幕左边的距离与控件距离屏幕


右边的距离的比,就是pivotXValue的值,如此即可。
动画构造方法,读过源码应该知道,默认是
private int mPivotXType = ABSOLUTE;
private int mPivotYType = ABSOLUTE;
private float mPivotXValue = 0.0f;
private float mPivotYValue = 0.0f;


默认是相对屏幕类型,并且是在屏幕的左上角,也就是说从屏幕的左上角向右边和下边扩散







旋转动画和缩放动画类似,可以参考看看。


位移动画,也和上述类似,默认都是相对屏幕,
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float 


toYDelta)
四个参数都是可以传int值,就是像素。
说的再通俗一点


选择参照为Animation.ABSOLUTE,对应的值是具体的坐标值,比如100到400,指绝对的屏幕


像素单位


选择参照为Animation.RELATIVE_TO_SELF或者 Animation.RELATIVE_TO_PARENT是相对于自身


或父控件,对应值为相对于自身或者父控件的几倍或百分之多少。这里直接用float数字表示


,不要用%。


以上都可以设置动画次数和动画执行方式。









Android帧动画实现,防OOM,比原生动画集节约超过十倍的资源

2015年项目接到一个需求,实现一个向导动画,这个动画一共六十张图片,当时使用的是全志A33的开发板,通过使用Android的动画集实现,效果特别卡顿,然后想到这种方式来实现,效果很流畅.然后写成开一...
  • qq_25804863
  • qq_25804863
  • 2017年03月24日 17:54
  • 4632

android 帧动画的替代方案

在android 里有丰富的动画实现过程,其中帧动画的使用也是非常广泛,比如在网络加载数据的时候我们希望界面中间显示一头老牛努力跑动的效果. 此时我们大多都会选择让美工做好一系列老牛跑动的图片,少则...
  • u014700919
  • u014700919
  • 2016年01月11日 15:16
  • 1445

Android 帧动画OOM问题优化

普通实现 实现一个帧动画,最先想到的就是用animation-list将全部图片按顺序放入,并设置时间间隔和播放模式。然后将该drawable设置给ImageView或Progressbar就OK了。...
  • wanmeilang123
  • wanmeilang123
  • 2016年12月29日 16:10
  • 3077

2014-10-31Android学习------序列帧动画,开始,结束监听的解决--------GIF动画实现

写一篇文章很辛苦啊!!! 转载请注明,联系请邮件nlp30508@qq.com 我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的...
  • u014737138
  • u014737138
  • 2014年11月02日 16:46
  • 3081

Android动画总结系列(1)——帧动画

本文总结了Android中最基本的动画帧动画的实现方法与AnimationDrawable类的API与关键源码。...
  • u013478336
  • u013478336
  • 2016年08月06日 17:27
  • 3531

Android动画之逐帧动画(FrameAnimation)详解

转载请注明出处:http://blog.csdn.net/xiaohao0724/article/details/54582965 Android中的动画,大概分为三种: 1、逐帧动画...
  • xiaohao0724
  • xiaohao0724
  • 2017年01月17日 14:44
  • 1484

Android循环帧动画不执行问题

在执行帧动画时,发现在一些
  • kangbulb
  • kangbulb
  • 2014年11月07日 17:06
  • 1777

android中帧动画的实现方式

帧动画实现的第一种方式的步骤: 利用xml文件的形式实现:     (1)找一些图片放到drawable文件夹下     (2)在drawable文件夹下通过xml文件生成动画 创建的就是一个anim...
  • smile0528
  • smile0528
  • 2016年07月26日 11:17
  • 3741

Android 用surfaceview模拟帧动画的效果,解决帧动画的OOM问题

最近做的项目,客户临时要求改版,我真的是最烦这个,要求跟换主页面的背景,换上新的背景图,要求是动态的。 效果(我随便拿的五个图片做的gif): 方案: 帧动画方案:      ...
  • Coder_Hcy
  • Coder_Hcy
  • 2017年06月26日 10:38
  • 1096

关于序列帧动画,开始,结束监听的解决

发小菜鸟一枚,请多指教 android中有渐变动画和帧动画两种,其中渐变动画是自带监听的,而帧动画却没有,淡腾了,如果我想在播放序列帧的开始和结束时进行操作怎么办?度娘无果,没办法自己写吧.附上De...
  • knockheart
  • knockheart
  • 2015年10月13日 13:37
  • 2999
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 帧动画
举报原因:
原因补充:

(最多只允许输入30个字)