博客
关于我
Android UI效果篇-(3)用属性动画实现收缩菜单
阅读量:349 次
发布时间:2019-03-04

本文共 3883 字,大约阅读时间需要 12 分钟。

  

前言

~这篇文章主要记录下属性动画的简单使用,通过属性动画来实现一个常见的收缩菜单的功能。效果如下:

收缩菜单动画效果

1.属性动画简单使用

~下面通过第一种收缩的样式代码来详细介绍下属性动画的属性:

private boolean isOpen = true;//开关标志位LinearLayout ll= (LinearLayout) findViewById(R.id.llbottom);//模拟的底部菜单栏FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {            if (isOpen) {                isOpen = false;                ObjectAnimator animator = ObjectAnimator.ofFloat(ll, View.TRANSLATION_X,ll.getWidth());                animator.start();            } else {                isOpen = true;                ObjectAnimator animator = ObjectAnimator.ofFloat(ll, View.TRANSLATION_X, 0);                animator.start();            }    }});

这里使用ObjectAnimator类对底部菜单栏ll的X轴方向进行了平移动画处理,平移的距离是底部菜单栏ll的整个宽度。

ObjectAnimator animator = ObjectAnimator.ofFloat(ll, View.TRANSLATION_X,ll.getWidth());
  • 第一个参数:被操控的View
  • 第二个参数:需要被改变的View的属性
  • 第三个参数:改变的大小

其实还可以有更多的参数:

ObjectAnimator animator = ObjectAnimator.ofFloat(ll, View.TRANSLATION_X,0,ll.getWidth(),0,llll.getWidth(),0);

这样实现的就是一个来回拉伸的效果。


2.属性动画属性值

~

属性值名称 对应View属性值名称 属性效果
"translationX" View.TRANSLATION_X 在X轴上平移
"translationY" View.TRANSLATION_Y 在Y轴上平移
"translationZ" View.TRANSLATION_Z 在Z轴上平移
"x" View.X View的x坐标
"y" View.Y View的y坐标
"alpha" View.ALPHA 改变View的透明度
"rotation" View.ROTATION 围绕支点进行2D旋转
"rotationX" View.ROTATION_X 围绕X轴进行3D旋转
"rotationY" View.ROTATION_Y 围绕Y轴进行3D旋转
"scaleX" View.SCALE_X 缩放X轴
"scaleY" View.SCALE_Y 缩放Y轴

以上就是全部的属性动画属性值,部分会有api版本的限制,比如“z”,“translationZ”等,不建议使用。


3.改变属性动画的缩放点

~
属性动画并没有像补间动画一样提供了“pivotX”的方法来改变缩放动画的点,所以我们需要手动来设置缩放点。我们知道属性动画是直接改变的控件的属性,所以我们直接改变控件的"PivotX"或者"PivotY"即可。

DisplayMetrics metric = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metric);int width = metric.widthPixels; ll.setPivotX(width);ll.setPivotY(0);

通过上面的代码我们就将缩放点改变到了控件的右上角,默认是控件左上角。


4.其他效果的核心代码

  • 效果二:平移Y轴
    if (isOpen2) {   isOpen2 = false;   ObjectAnimator animator = ObjectAnimator.ofFloat(ll2, View.TRANSLATION_Y, ll.getHeight());    animator.start();} else {    isOpen2 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll2, View.TRANSLATION_Y, 0);      animator.start();}
  • 效果三:缩放Y轴
    if (isOpen3) {   isOpen3 = false;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll3, View.SCALE_Y, 1);    animator.start();} else {    isOpen3 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll3, View.SCALE_Y, 0);    animator.start();}
  • 效果四:缩放X轴
    if (isOpen4) {    isOpen4 = false;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll4, View.SCALE_X, 1);    animator.start();} else {    isOpen4 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll4, View.SCALE_X, 0);    animator.start();}
  • 效果五:同时缩放X轴和Y轴
    if (isOpen5) {    isOpen5 = false;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll5, View.SCALE_X, 1);    ObjectAnimator animator1 = ObjectAnimator.ofFloat(ll5, View.SCALE_Y, 1);    AnimatorSet animatorSet = new AnimatorSet();    animatorSet.playTogether(animator, animator1);    animatorSet.start();} else {    isOpen5 = true;    ObjectAnimator animator = ObjectAnimator.ofFloat(ll5, View.SCALE_X, 0);    ObjectAnimator animator1 = ObjectAnimator.ofFloat(ll5, View.SCALE_Y, 0);    AnimatorSet animatorSet = new AnimatorSet();    animatorSet.playTogether(animator, animator1);    animatorSet.start();}


作者:自导自演的机器人
链接:http://www.jianshu.com/p/835fc313d1e1
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
你可能感兴趣的文章
Deformity ASP/ASPX Webshell、Webshell Hidden Learning
查看>>
Decision tree(决策树)算法初探
查看>>
《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
查看>>
sctf_2019_easy_heap
查看>>
Eclipse 创建 Maven 项目
查看>>
AT 杂题泛做
查看>>
StringBuilder拼接字符串,“,”在前还是在后问题
查看>>
给asterisk1.8.7添加menuselct选项
查看>>
ASP.NET Core分布式项目实战(oauth2 + oidc 实现 server部分)--学习笔记
查看>>
ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记
查看>>
组合模式
查看>>
PyQt5之音乐播放器
查看>>
css居中方法与双飞翼布局
查看>>
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
查看>>
SQL注入
查看>>
XCTF-upload1
查看>>
LeetCode 题解 | 1. 两数之和
查看>>
#2036:改革春风吹满地
查看>>
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
查看>>
P1379 八数码难题 ( A* 算法 与 IDA_star 算法)
查看>>