android下,如何实现动画效果那样修改控件的宽高?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android下,如何实现动画效果那样修改控件的宽高?相关的知识,希望对你有一定的参考价值。

在android下,如何实现动画那样缓缓的增加控件的宽高?scale实现的只是动画拉伸而已,我需要的是控件真正的在改变宽高~

参考技术A 创建一个线程修改控件大小相关数据,handler设置控件LayoutParmas本回答被提问者采纳 参考技术B Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。

第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。
主要类:
Animations
一、Animations介绍
Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转、缩放、淡入淡出等,这些效果可以应用在绝大多数的控件中。
二、Animations的分类
Animations从总体上可以分为两大类:
1.Tweened Animations:该类Animations提供了旋转、移动、伸展和淡出等效果。Alpha——淡入淡出,Scale——缩放效果,Rotate——旋转,Translate——移动效果。
2.Frame-by-frame Animations:这一类Animations可以创建一个Drawable序列,这些Drawable可以按照指定的时间间歇一个一个的显示。
三、Animations的使用方法(代码中使用)
Animations extends Object implements Cloneable
使用TweenedAnimations的步骤:
1.创建一个AnimationSet对象(Animation子类);
2.增加需要创建相应的Animation对象;
3.更加项目的需求,为Animation对象设置相应的数据;
4.将Animatin对象添加到AnimationSet对象当中;
5.使用控件对象开始执行AnimationSet。
  Tweened Animations的分类
  1、Alpha:淡入淡出效果
  2、Scale:缩放效果
  3、Rotate:旋转效果
  4、Translate:移动效果

Animation的四个子类:
  AlphaAnimation、TranslateAnimation、ScaleAnimation、RotateAnimation

Tween Animations的通用方法
  1、setDuration(long durationMills)
  设置动画持续时间(单位:毫秒)
  2、setFillAfter(Boolean fillAfter)
  如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态
  3、setFillBefore(Boolean fillBefore)
  如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态
  4、setStartOffSet(long startOffSet)
  设置动画执行之前的等待时间
  5、setRepeatCount(int repeatCount)
  设置动画重复执行的次数

Android基础控件——ViewPager实现带有动画的引导页


 

好了,又到我们学习基础控件的时候了,其实引导页很简单,就是五张图片而已

传统的ViewPager实现引导页和ListView是一样道理的,只是把ListView的Item换成图片,把BaseAdapter换成PagerAdapter,我们先来看下传统引导页的效果图

技术分享图片

既然用到的是ViewPager,那么xml文件就必须要有ViewPager,细心的你,可能会发现最后一页还有个按钮的出现,没错,xml文件中也要有个按钮

开头也说了,Viewpager其实就和ListView一样的,需要一个Adapter,那么就从Adapter入手。Google提供了一个专门适配ViewPager的Adapter——PagerAdapter

基本ViewPager的Adapter都是这么写的,就是往ViewPager中添加List传过来的View和删除List传过来的View,可以说是每个ViewPager的模板

我们找到对应的ViewPager,然后设置Adapter,代码中的initViews、initListener、initData是按顺序执行下去的,这段代码不难,很容易看懂

细心的你可能也发现了该引导页是没有状态栏的,所以我们需要设置其主题为状态栏透明

特别注意:这里需要注意的是图片的大小问题,如果图片高清太大,可能会出现内存溢出的错误。

带有动画的引导页编写步骤和传统是一模一样的,只不过给ViewPager设置一个动画。Google提供ViewPager.setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer)方法来设置引导页的切换效果,这里先看Google提供的切换Demo

技术分享图片

从上面效果看出,只是在引导页之间添加了一个动画而已,而Google提供的PageTransformer就可以对当前位置的引导页进行操作,比如:设置透明度的变化,设置缩放的变化,就能实现切换的动画效果

从上面的代码中,可以知道在ViewPager滑动的时候,苏月会触发transformPage这个方法,并且会将当前的position和View传递过来,下面就是我们的对View的操作

① position

  1. position < -1(即-无穷到-1):让引导页消失,透明度为0
  2. position <=0(即-1到0):让引导页出现
  3. position <=1(即0到1):让引导页根据position做动画
  4. 剩下else(即1到无穷):让引导页消失,透明度为0

② 图解position

技术分享图片

原谅我画图不好看,不生动,如果还不理解的话可以自己打印Log信息,把View和Position都打印出来帮助理解

使用PageTransformer非常简单,只要通过ViewPager设置即可

Google还为我们提供了另一个动画效果,看效果图

技术分享图片

实现步骤其实和上面的步骤是一样的,具体我们来看PageTransformer的编写

这里的原理就不分析了,和上面是一样的,只不过操作不同而已。除了Google提供的Demo之外,我们可以模仿谷歌的Demo,编写出我们自己的动画效果

效果如图

技术分享图片

好了,今天基础控件就到这里了,如果不懂的话可以自己实践一下,然后用纸笔思考思考,你就会有收获的。我也是通过博客学习别人的博客,然后通过自己的方式,将学习的内容写出来。我们一起加油,后来者们

以上是关于android下,如何实现动画效果那样修改控件的宽高?的主要内容,如果未能解决你的问题,请参考以下文章

android动画,translateanimation,是不是可以实现让两个控件流畅的执行同一动画?

如何获取隐藏元素的宽高

『Android基础控件』Lottie实现复杂动画效果

Android基础控件——ViewPager实现带有动画的引导页

android PercentRelativeLayout 支持百分比来设置控件的宽高

使用CircularReveal动画效果切换页面