1. 前言

最近在干一件大事,好像很久没写博客,周末虽然忙了两天但是没看书也没干啥,失败的周末。。。

上周五在群里看到一个需求,如下图。已经工作上已经闲了一周了,反正自己在做自己的事情,就试着写了下,没想到竟然做不出下面的需求。


很容易看出来 UI 想要的效果,无非点击对应控件,背景滑动。

2. 实现

分析下:
1. 点击黄色背景滑动,说明布局时应该要使用到 FrameLayout ,然后上下两层中 有一层要透明,因为黄色背景是必须的,所以需要将 上面一层 密码 验证码 背景设置成透明,不然他们的颜色会覆盖黄色。
2. 点击滑动,说明需要设置动画,这里是使用 补间动画 还是 属性动画呢,无所谓 不影响,因为这黄色背景的动画没实际意义,这里没关系,当然最好还是用 属性动画。
3. 黄色背景的宽度,这里是最难的。因为只要知道背景的宽度就可以知道 动画移动的距离,直接将布局总宽度减去背景的宽度就是移动距离。

仔细看下 UI 图,黄色背景宽度应该有两种方式确定,第一:不管怎样,占总宽度的一般,第二:文本 密码的左间距+文本的宽度+同样长度的右间距。如下图


最好的效果应该是第二种,计算同样的左右间距。但是这里就有问题了,一边三个字 一边两个字,这文本的长度不能定死,宽度也就不能定死了。

2.1 代码

首先上代码布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="match_parent"><View
        android:id="@+id/view"android:layout_gravity="right"android:background="@drawable/bg_2"android:layout_width="0dp"android:layout_height="28dp" /><RelativeLayout
        android:id="@+id/rl"android:background="@drawable/bg_1"android:layout_width="88dp"android:layout_height="28dp"><TextView
            android:id="@+id/tv1"android:textColor="#333333"android:layout_marginLeft="10dp"android:textSize="12sp"android:text="密码"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextView
            android:id="@+id/tv2"android:textColor="#333333"android:layout_marginRight="10dp"android:textSize="12sp"android:text="验证码"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_width="wrap_content"android:layout_height="wrap_content" /></RelativeLayout>
</FrameLayout>

现在计算黄色背景的宽度,可以看到上面布局黄色背景宽度我设置的是 0dp ,因为这个宽度需要计算,这里设置多少都无所谓。
这里使用 layoutparams 获取宽度,因为这里涉及到 文本控件tv 宽度的获取,所以不能在 activity 的生命周期中获取

    @Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);setBGWidth();}/*** 设置黄色背景的宽度*/private void setBGWidth(){RelativeLayout.MarginLayoutParams marginLP = (RelativeLayout.MarginLayoutParams) tv1.getLayoutParams();/*** 获取到tv控件左间距*/int leftMargin = marginLP.leftMargin;FrameLayout.LayoutParams bgLP = new FrameLayout.LayoutParams(bgView.getLayoutParams());/*** 黄色背景宽度  =  左间距 + tv宽度 + 右间距*/bgLP.width = leftMargin + tv1.getWidth() + leftMargin;bgView.setLayoutParams(bgLP);}

接下来动画比较简单,其中一个xml如下

<translate xmlns:android="http://schemas.android.com/apk/res/android"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="100%"android:toYDelta="0"android:duration="1000"android:fillAfter="true"></translate>

启动动画

    final Animation transToRight = AnimationUtils.loadAnimation(this, R.anim.toright);final Animation transToLeft = AnimationUtils.loadAnimation(this, R.anim.toleft);bgView.startAnimation(transToLeft);


用属性动画,获取到移动的距离

    /*** 获取移动偏移值* @return*/private int getTransValue(){int offValue = 0;int allVaule = rl.getWidth();int mVaule = bgView.getWidth();offValue = allVaule-mVaule;return offValue;}

移动动画

    private void toLeft(){int v = getTransValue();ObjectAnimator anitRight = ObjectAnimator.ofFloat(bgView, "translationX", v,0);anitRight.setDuration(1000);anitRight.start();}

效果图和上面一样 就不贴了,发现没,有种蛋疼的感觉,好像达不到 UI 的要求。

恩 就刚才 我在写博客的时候,修改了下代码,每次开始移动动画前 修改 黄色背景view的宽度 ,说实话 不是很好看


效果不是很好,可能与 UI 设计的有关,毕竟滑动前有点点停顿,也可能与插值器有关,加个插值器应该好点,毕竟这个移动 “太均匀”了

3. 源码

如果帮到给个star支持下 thx
https://github.com/GuoZhaoHui628/VerifyAnim

最后一刻完成了 UI 的需求--验证码动画相关推荐

  1. UI设计动效\动画素材模板|分层分步骤学习动效设计

    动效意味着充满生命和兴奋,为静态事物增添了生命.然而,在软件方面,动效不仅是为了获得乐趣,而且是为了解决问题. 搜UI SOOUI 带来UI设计动效\动画素材模板,分层分步骤学习动效设计.从可临摹分层 ...

  2. python selenium UI自动化解决验证码的4种方法

    测试环境 windows7+ firefox50+ geckodriver # firefox浏览器驱动 python3 selenium3 selenium UI自动化解决验证码的4种方法:去掉验证 ...

  3. SAP UI的加载动画效果和幽灵设计(Ghost Design)

    这是Jerry 2021年的第 14 篇文章,也是汪子熙公众号总共第 285 篇原创文章. 在本篇文章之前,Jerry 印象最深的幽灵,应该要算<星际争霸I>里人族能够隐形的空中单位 Wr ...

  4. java通过ssh读取日志_IDEA+java通过SSH来进行分析日志,实现UI自动化动态验证码登录...

    在我写自动化脚本的时候是要真实发送验证码才能往下进行UI自动化 思路:验证码会显示在哪些地方,手机短信?数据库存储?日志? 完整代码如下: package guanyu.tools; import c ...

  5. ui unity 图片高亮_程序化生成UI模型与顶点动画

    顶点动画一般指通过顶点着色器对模型每个顶点独立运动的方法.在游戏中遇到碎片爆破或者聚合一类的.涉及到大量同类物体在有序和无序之间切换的特殊效果,就非常适合将所有物体顶点每帧位移和形变的迭代交付给GPU ...

  6. Ui设计中的动画如何应用,你知道吗?

    UI设计中的动效 站在用户的立场对每段动画做出决断,"挺好看的"可不是正确答案. 保持每段动画时间不超过300ms. 避免使用线性动画,它使得动画看起来迟缓.无趣且机械. 99%的 ...

  7. 什么?!UI设计了新动画特效!别说话,Drawable来救你。

    一.前言 近段时间公司扩大人才储备,需要我去面试.大多数来面试的人当被问到Android动画的问题时候基本只会说android动画几种类型啊什么的.说用到过哪种动画,都说只用过简单的帧动画.其实这种情 ...

  8. unity中UI界面的一些动画实现总结

    在做unity的ui界面的时候,美术通常会实现一些动画效果.这里列举几个: 1.位置的变化 2.旋转的变化 3.缩放的变化 4.alpha的变化 5.颜色的变化 我们举一个例子: 位置的变化: (1) ...

  9. UI一揽子计划 23 (动画的使用场景、UIView动画、CGAffineTransform2D仿射变换、CALayer、CAAnimation、)

    在iOS 中的动画是指一些视图上的过渡效果,合理利用动画能提高用户体验. 一. UIView动画 1). UIView动画块的使用 ([UIView beginAnimations: nil cont ...

最新文章

  1. 周志华教授:关于深度学习的一点思考
  2. 寻找可用的机器学习算法
  3. 一次网站性能排查实录
  4. OV7670使用经验总结
  5. linux内核技术文章
  6. 分享WCF聊天程序--WCFChat
  7. EXC_BAD_ACCESS
  8. 印刷体是什么意思_家长晒出4年级小学霸课前笔记,字迹堪比“印刷体”,老师都羡慕...
  9. TCP/IP笔记-ARP协议包结构相关笔记
  10. Python3 casefold() 方法
  11. “变态级”系统管理员笔试题 我的答卷
  12. 从2D恢复出3D的数据
  13. Spring定时器技术终结者——采用Scheduled注释的方式实现Spring定时器
  14. WPF中使用Aforge控件
  15. 怎么把pdf拆分成一页一页的?
  16. CAD打印线条太粗、线条颜色设置
  17. Matlab批量转换dicom,基于Matlab的批量转换DICOM格式CT序列图像的实现
  18. 盘点独立游戏开发者的12个开发和运营技巧
  19. 汇总阿里云GPU云服务器常见问题解答FAQ
  20. 在Win7环境下搭建Geant4工作平台

热门文章

  1. http://wenku.baidu.com/view/f9b3b08a680203d8ce2f2452.html
  2. 使用U盘传数据时操作系统做了什么(源码分析)
  3. 销售统计php,PHP如果统计数据库里一个月或者一个礼拜的销售金额
  4. (esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL
  5. 腾讯首款元宇宙项目「ZPLAN」曝光,由天美工作室群总裁姚晓光带队
  6. 自主可控!万应低代码通过华为鲲鹏、麒麟等多项国产化认证及国家信息安全等级保护三级备案证明
  7. python文件批量重命名
  8. 【洛谷】P1957 口算练习题【C++】
  9. 单片机类型介绍和入门单片机
  10. 40个实用JS自定义函数(二)