Android 动画
来源:互联网 发布:php某个字符替换 编辑:程序博客网 时间:2024/06/07 16:34
Android动画就哪几类,他们的特点和区别时什么
Android动画就三种 第一个补间动画 第二种帧动画 第三中属性动画(3.0开始)
tweened animation 补间动画 通过对场景对象不懂做图像的变化(评议 缩放 旋转)产生动画效果
frame-by-frame animation 帧动画 顺序播放事先准备好的图像,类似电影一样
这两种动画类型都能在任何View对象中使用,用来提供简单的旋转计时器,
Property animation 属性动画 未完成
帧动画 可以使用代码和XML两种实现方式
AnimactionDrawable 通过这个对象我们可以使用代码来创建一个帧动画``` //创建对象 AnimationDrawable animaction = new AnimationDrawable(); //设置帧动画用的图片 animation.addFrame(R.drawable.xx, 100); //关联imageView imageView.setBackground(animation); //循环执行动画,默认只执行一次 animation.setOnShot(false); //执行帧动画 animation.start(); //停止动画 if(animation.isRunning()) animation.start();```XML实现帧动画,首先我们再res文件里面创建一个固定名字drawable文件夹,然后创建xml文件,``` 假设文件名字animation.xml <?xml> <animation-list> <item android:drawable="" android:duration=""></item> </animation-list> //然后通过代码加载xml AnimationDrawable animDrawable = getResouces().getDrawable(R.drawable.animation); //启动和停止是一样的```补间动画 (tween)常见使用有 缩放(scale) 位移(translation) 透明度(alpaha) 旋转(rotate)。也是有2种方式实现代码和XML实现```代码实现 //位移动画 // fromXType 开始点的X坐标 相对于自己 相对父容器或相对自己 // formxvalue 开始位置数字 TranslateAnimation translateAnimation = new TranslateAnimation(fromXTye, formXValue, toXType,toXValue, formYType, fromYValue, toYType, toYValue); //意思就是说相对父容器x 再0这个位置 到父容器1(就是父容器的宽)后面的参数同理 //其实这里面的使用的都是偏移量区分正负 new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,1.0f, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 1.0f); //必要设置。动画执行时间,单位毫秒 transleAnimation.setDuration(3000) //设置循环运行次数 Animation.INFINITE是无穷,也就说永远不停止 transleAnimation.setRepeatCount(Animation.INFINITE) //设置是否填充 其实就是动画执行完毕后view是不是停在位置后的位置而不是回到原来的位置,默认是false transleAnmiation.setFillAfter(true) //设置动画重复模式 两个模式 RESTART 重新开始 REVERSE 往复 transleAnimation.setReperatMode(Animation.RESTART) //关联View imageView.setAnimation(transleAnimation) //启动动画 transleAnimation.start() //旋转动画 //根据上一个位置动画就知道了0 360 第一个是旋转初始度数,一个旋转多少度,后面四个参数分别是先对谁,再什么位置旋转。一半情况旋转都是相对自己来说的 自己长度和宽度的一半也就是中心点旋转 RotateAnimation rotateAnimation = new RotateAnimation(0 , 360, Animation.RELATVIE_TO_SELF, 0.5f, Animation.REVATVIE_TO_SELF, 0,5f) //设置动画时长 必要设置 rotateAnimation.setDuration(3000) //其他设置如位移动画一样 //透明度动画 //参数就是初始0 不可见 1就是可见没有透明度 AlphaAnimation alphaAnimation = new AlpahaAnimation(0 , 1) //设置动画时长 alpahaAnimation.setDuration(3000) //缩放动画 //前四个参数,什么位置开始 缩放多少 fromx x轴起点坐标 tox就是x轴的终点坐标 后两个就是y轴的起终点坐标 //pivoteXType 相对那个参照物 还是2种 一个相对自己 一个是相对父容器 //pivoteXValue 相对于谁的什么位置缩放 ScaleAnimation scaleAnimation = new ScaleAnimation(formX, toX, formY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue) //这样就是说缩放3倍,相对自己的中心点缩放 new ScaleAnimation(0, 3.0f, 0, 3.0f, Animation.RELATVIE_TO_SELF, 0.5, Animation.RELATVIE_TO_SELF, 0.5) //设置动画时长 scaleAnimation.setDuration(3000) //组合动画实现 //AnimationSet 创建参数false 就是不设置动画差速器,差速器可以然后动画先快后慢之类的速度效果后面说 AnimationSet animSet = new AnimationSet(false) //将上面的动画添加到集合中,可以添加多个 都需要分别设置时长 重复次数 和 重复模式 //特别注意当组合动画添加的时候,请将位移动画最后一个加入到动画集合中,如果不放在最后添加可能会出现位移不准确的情况 为啥不是太清楚 animSet.addAnimation(alphaAnimation) //将动画效果设置到view上面 iamgeView.setAnimation(animSet) //执行动画 animSet.start() //关于多个动画分别执行后组合,意思就是有一个动画执行完后再执行另一个动画 动画执行的监听 //设置动画监听 animation.setAnimationListener(new AnimationListener(){ //动画开始 public void onAnimationStart(Animation arg0){ } //动画重复 public void onAnimationRepeat(Animation arg0){ } //动画结束 public void onAnimationEnd(Animation arg0){ } }); //XML生成补间动画 再res文件夹下创建anim文件夹 //位移xml 文件名称translate 节点名称一看就知道了,这里说明一下100%p 就是相对父容器 没有p就是相对自己来说的 <xml?> <translate xmls="......" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="100%p" android.toYDelta="100%p" android:duration="3000" android:repeatCount="infinite" android:repeatMode="restart|reverse"> </translate> //加载xml文件 Animation anim = AnimationUtils.loadAnimation(context, R.anim.translate) //其他三种都是一样不再描述了 //xml组合动画 类似下面的写法 <xml?> <set> <translate xmls="......" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="100%p" android.toYDelta="100%p" android:duration="3000" android:repeatCount="infinite" android:repeatMode="restart|reverse"> </translate> <scale ......> <alpaha ...> </set>```//补间动画插值器InterpolatorAccelerateDecelerateInterpolator 先加速在减速AccelerateInterpolator 加速AnticipateInterpolator 先回退一小步然后加速前进AnticipateOvershootInterpolator 再上一个基础上超出终点一小步再回到终点BounceInterpolator 最后阶段弹球效果CycleInterpolator 周期运动DecelerateInterpolator 减速LinearInterpolator 匀速OvershootIntpolator 快速到达终点并超出一小步后回到终点``` //如果设置true 就是说明动画集合里面所有的动画都使用统一一个插值器,false则相反 AnimationSet animationSet = new AnimationSet(true) //设置插值器 animationSet.setinterpolator(new BounceInterpolator()) //对于AnimationSet 不能统一停止,只能分别停止子动画```属性动画 property animation 常用API ValueAnimation ObjectAnimation TimeAnimation 属性动画动画参数translationX 沿X轴位移translationY 沿Y轴位移rotationY 沿Y轴旋转rotationX 沿X轴旋转rotation 沿中心点旋转alpha 透明度scaleX 沿X轴缩放scaleY 沿Y轴缩放```//位移动画 //obejct 谁要执行这个动画,也就是执行动画的View//property 是执行什么动作 也就上面罗列的属性字符串//最后一个参数比较有意思,它是一个可变参数 也就是数组ObjectAnimation object_transla = ObjactAnimation.ofFloat(object, property, obj...)//上面这个位移动画实际应该是这个样子的. 最后数组就是x轴位移的数值,//如果我们写一个均匀递增那么动画就是匀速执行,//如果不是这根绝数组种差值大小的变化而加速或减速。ObjectAnimation object_transla = ObjectAnimation.ofFloat(view, "translationX", 10 ,20 ,30 ,50 ,100 , 200, 500 ,700)//设置动画时长object_transla.setDuration(5000)//设置重复次数object_transla.setRepeatCount(2)//无线重复ObjectAnimation.INFINITE //启动动画object_transla.start() ```//属性动画组合//第一种组合实现``` //设置属性动画的数据及动画效果 PropertyValuseHolder translate_animation = PropertyValuesHolder.ofFloat(property, obj...) PropertyValuseHolder scale_animation = PropertyValuesHolder.ofFloat(property, obj...) PropertyValuseHolder rotate_animation = PropertyValuesHolder.ofFloat(property, obj...) ObjectAnimation animation = ObajctAnimation .ofPropertyValuesHolder(view, translate_animation, scale_animation, rotate_animation) animation.setDuration(5000) animation.start();```第二种组合实现``` ObjectAnimation objectAnim = ObjectAnimation.ofFloat(view, "", 1.0f , 0) //设置刷新监听 objectAnim.addUpdateListener(new AnimationUpdateListener(){ public void onAnimationUpate(ValueAnimation animation){ //获取当前的值 float value = (Float) animation.getAnimatedValue(); //设置内容 view.setScaleX(value); view.setScaleY(value); view.setAlpha(value); } }); objectAnim.setDuration(50000) objectAnim.start()```//属性动画加强``` //执行属性动画 ValueAnimation valueAnim = new ValueAnimation(); //初始位置 valuesAnim.setObjectValues(new PointF(0, 0)); valuesAnim.setDuraion(10000) //设置属性动画的执行过程数据 valueAnim.setEvaluator(new TypeEvaluator<PointF>(){ public PointF evaluate(float fraction, PointF startValue, PointF endValue){ //fraction 就是当前的时间处以duration的比值 //startValue 起始点的数值 //endValue 终点的数值 PointF pointf = new PointF() pointf.x = fraction * width; pointf.y = (float) Math.sqrt(pointf.x * width) return pointf } }) //设置动画变化的监听 valueAnim.addUpdateListener(new AnimationUpdateListener(){ public void onAnimationUpdate(valueAnimation animation){ //当前位置点 PointF point = animation.getAnimationValue(); //设置当前View的位置 imageView.setTranslationX(pointf.x) imageView.setTranslationY(pointf.y) } }); valuesAnim.start()```
阅读全文
0 0
- Android动画--视图动画
- Android动画--属性动画
- android动画 -- 属性动画
- Android:动画:tween动画
- Android:动画:Frame动画
- Android动画动画二
- Android动画-属性动画
- Android动画【属性动画】
- Android动画-帧动画
- Android动画--帧动画
- Android动画--属性动画
- Android动画-View动画
- android 动画 -- tween动画
- android 动画
- android动画
- android动画
- android动画
- Android动画
- AudioRecorder实时录制mp3格式音频
- 决策树
- Spring MVC前端与后端5种ajax交互方式
- vue中的生命周期
- ABP框架心得系列-1.本土化和ABP核心
- Android 动画
- 集成Google登录
- php抓取通达官网的最新用户名单
- FontMetrics以及自定义ImageSpan实现TextView中文图混排时文图的居中对齐
- TCODE找相應的BAPI(主要是找到包PACKAGE)
- Java多线程之详解ThreadLocal类(一)
- CF228D Fox and Perfect Sets
- HashMap1.8与HashMap1.6的不同
- Windows7下搭建web服务器