android今日头条刷新,仿今日头条刷新vector动画

一般的刷新动画是一个圈圈在转,而头条的比较特殊,直接上写好的效果图(一直不知道怎么把图片尺寸调小o(╯□╰)o)吧~

fba2ffb8335e

刷新动画_.gif

首先整个效果是通过SVG和vector来实现的,如果不是很了解,请看大佬的文章:

SVG学习--AnimatedVectorDrawable的使用

动画思路:

整个view可以分为五个部分:

1、最外面的壳(不需要动画)

2、中间矩形框

3、矩形框中的灰色矩形块

4、三根短线

5、三根长线

第一步:在drawable文件夹下新建名为refresh的vector文件:

android:width="200dp"

android:height="200dp"

android:viewportHeight="200"

android:viewportWidth="200">

android:name="out_rect"

android:pathData="M70,60

L130,60

Q140,60 140,70

L140,130

Q140,140 130,140

L70,140

Q60,140 60,130

L60,70

Q60,60 70,60"

android:strokeColor="@color/colorCustomHeaderLine"

android:strokeWidth="2" />

android:name="middle_rect"

android:pathData="M71,75

L100,75

L100,95

L72,95

L72,75"

android:strokeColor="@color/colorCustomHeaderLine"

android:strokeWidth="2" />

android:name="inner_rect"

android:fillColor="@color/colorCustomHeaderInner"

android:pathData="M73,76

L99,76

L99,94

L73,94" />

android:name="short_lines"

android:pathData="M108,75

L128,75

M108,85

L128,85

M108,95

L128,95"

android:strokeColor="@color/colorCustomHeaderLine"

android:strokeWidth="2" />

android:name="long_lines"

android:pathData="

M72,105

L128,105

M72,115

L128,115

M72,125

L128,125"

android:strokeColor="@color/colorCustomHeaderLine"

android:strokeWidth="2" />

打开xml右边的预览,我们可以看到效果

fba2ffb8335e

效果图.png

第二步:在drawable文件夹下新建名为refresh_vector的animated-vector

android:drawable="@drawable/refresh">

android:name="middle_rect"

android:animation="@animator/anim_middle_rect" />

android:name="short_lines"

android:animation="@animator/anim_short_lines" />

android:name="long_lines"

android:animation="@animator/anim_long_lines" />

android:name="inner_rect"

android:animation="@animator/anim_inner_rect" />

这里需要注意几点:

1、android:drawable="@drawable/refresh"这里一定要引用上面的refresh文件

2、target标签下的name一定要和refresh中的path标签下的名字一致

第三步:新建animator文件夹(不是anim),并在下面新建短线、长线、中间矩形框和里面矩形对应的objectAnimator集合:

anim_middle_rect.xml:

android:ordering="sequentially">

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M71,75

L100,75

L100,95

L72,95

L72,75"

android:valueTo="M99,75

L128,75

L128,95

L100,95

L100,75"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M99,75

L128,75

L128,95

L100,95

L100,75"

android:valueTo="M99,105

L128,105

L128,125

L100,125

L100,105"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M99,105

L128,105

L128,125

L100,125

L100,105"

android:valueTo="M71,105

L100,105

L100,125

L72,125

L72,105"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M71,105

L100,105

L100,125

L72,125

L72,105"

android:valueTo="M71,75

L100,75

L100,95

L72,95

L72,75"

android:valueType="pathType" />

anim_short_lines.xml:

android:ordering="sequentially">

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M108,75

L128,75

M108,85

L128,85

M108,95

L128,95"

android:valueTo="M72,105

L128,105

M72,115

L128,115

M72,125

L128,125"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M72,105

L128,105

M72,115

L128,115

M72,125

L128,125"

android:valueTo="M72,105

L92,105

M72,115

L92,115

M72,125

L92,125"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M72,105

L92,105

M72,115

L92,115

M72,125

L92,125"

android:valueTo="M72,75

L128,75

M72,85

L128,85

M72,95

L128,95"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M72,75

L128,75

M72,85

L128,85

M72,95

L128,95"

android:valueTo="M108,75

L128,75

M108,85

L128,85

M108,95

L128,95"

android:valueType="pathType" />

anim_long_lines.xml:

android:ordering="sequentially">

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M72,105

L128,105

M72,115

L128,115

M72,125

L128,125"

android:valueTo="M72,75

L92,75

M72,85

L92,85

M72,95

L92,95"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M72,75

L92,75

M72,85

L92,85

M72,95

L92,95"

android:valueTo="M72,75

L128,75

M72,85

L128,85

M72,95

L128,95"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M72,75

L128,75

M72,85

L128,85

M72,95

L128,95"

android:valueTo="M108,105

L128,105

M108,115

L128,115

M108,125

L128,125"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M108,105

L128,105

M108,115

L128,115

M108,125

L128,125"

android:valueTo="M72,105

L128,105

M72,115

L128,115

M72,125

L128,125"

android:valueType="pathType" />

anim_inner_rect.xml

android:ordering="sequentially">

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M73,76

L99,76

L99,94

L73,94"

android:valueTo="M101,76

L127,76

L127,94

L101,94"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M101,76

L127,76

L127,94

L101,94"

android:valueTo="M101,106

L127,106

L127,124

L101,124"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M101,106

L127,106

L127,124

L101,124"

android:valueTo="M73,106

L99,106

L99,124

L73,124"

android:valueType="pathType" />

android:duration="500"

android:interpolator="@android:interpolator/decelerate_cubic"

android:propertyName="pathData"

android:valueFrom="M73,106

L99,106

L99,124

L73,124"

android:valueTo="M73,76

L99,76

L99,94

L73,94"

android:valueType="pathType" />

最后一步,在activity中:

android:id="@+id/imageView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

final AnimatedVectorDrawable animatedVectorDrawable = (AnimatedVectorDrawable) ContextCompat.getDrawable(this, R.drawable.refresh_vector);

findViewById(R.id.imageView).setImageDrawable(animatedVectorDrawable);

animatedVectorDrawable.start();

//循环动画貌似只能这样。。。

final Handler mainHandler = new Handler(Looper.getMainLooper());

animatedVectorDrawable.registerAnimationCallback(new Animatable2.AnimationCallback() {

@Override

public void onAnimationEnd(Drawable drawable) {

mainHandler.post(new Runnable() {

@Override

public void run() {

animatedVectorDrawable.start();

}

});

}

});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在html中标题字号一共有几种,HTML中常用的几种标签

在HTML中,标签是首要的,也是最重要的东西。一旦进入HTML,认识和理解标签是基本的需要,因为这是区分HTML代码与普通文本的分隔符。这些标签是用来显示文档中的普通文本或转化文本的指令的标签。什么是转化后的文本?要显…

html静态页面引用其他页面,Shtml完美解决静态页面内部调用其他页面(非Iframe、Object、Js方法)...

我想这个是所有前端工程师都会碰到的问题,在你做了很多页面,需要调用同一个头部或者底部的时候,需要嵌套一下,这个时候怎么办Iframe、Object、Js调用的方法就不讨论了,网上搜索一大堆,不过兼容性不好这里给…

鸿蒙手机如何录屏,安卓手机如何屏幕录制视屏?手机视频录制方法

安卓手机如何屏幕录制视屏?手机视频录制方法2018年12月17日 17:05作者:黄页编辑:黄页分享随着科技的不断进步发展,手机已经成为人类不可缺少的一种生活神器,人们已经不满足只是用来打打电话、发发短信那么简单了,手机的用途主要用来社交、娱乐…

html判断为空的函数,javascript怎么判断是否为空字符串?

JavaScript中可以使用if(typeof obj"undefined"||objnull||obj"")语句通过判断字符串的数据类型来判断字符串是否为空。判断字符串是否为空的方法函数:function isEmpty(obj){if(typeof obj "undefined" || obj null || obj "…

et200sp模块接线手册_西门子PN/PN耦合器学习应用系列(1)-外观及接线

早在2017年我曾写过两篇文章介绍西门子PN/PN耦合器,文章链接如下:初识西门子PNPN耦合器(PN/PN Coupler);如何在博途(TIA Portal)环境下组态PNPN耦合器?当时PN/PN耦合器的固件版本还是V3.x。随着产品的升级,新版本的PN/…

js 条码枪扫描_年会展台 精彩不断 | 沧田:从打印到扫描录入 国产品牌从未停止...

11月23日-25日,中国现代办公行业年会(以下简称COAA年会)在南昌召开。今年对于OA行业而言,国产品牌的崛起成为主要特征之一。以针式打印机起家的沧田,在本次展会中展示了多款重量级产品,涵盖了针式打印机、激光一体机、条码打印机、…

投后管理岗面试_2020天津水务招79人,管理岗+操作岗,专科起报

Hello大家好,我们今天的国企招聘主要说的是天津水务。天津水务的公告和去年相比晚了几个月,而且要求也变了一些——变成了校招(要求2020年应届生),虽然条件还是不高——大专起报。2点要求基本的条件就是要求&#xff1…

微信没有回车键怎么换行_在东平相亲网加了心仪对方的微信,但是没有话题怎么办?...

最近很多东平单身小伙伴问红娘:加了对方微信不知道聊什么,觉得两个人没有共同话题,而且感觉该聊的都聊了,每天早晚安也发了,够热情了。还有的说不知道怎么回信息或者不知道跟ta说什么话题该怎么办?1其实这些…

中国重汽微服务管理_springcloud微服务架构实战:商家管理微服务设计

商家管理微服务设计商家管理微服务是一个独立的RESTAPI应用,这个应用通过接口服务对外提供商家信息管理、商家权限管理和菜单资源管理等方面的功能。商家管理微服务开发在merchant-restapi模块中实现,有关这一类型模块的依赖引用、配置、启动程序的设计等…

html文字竖直书写,css 文字竖直居中的写法和图片垂直居中代码(图文)

界面上文章左右居中使用text-aligin:center,上下竖直居中的写法如下,图片垂直居中的代码文字、图片居中显示的方法.content{height: 40px;line-height: 40px;border:1px double #abc;}.myimg{/*非IE的主流浏览器识别的垂直居中的方法*/display: table-ce…

怎么判断到了月初_双春年与无春年怎么区分?2021年是寡妇年吗?

导读:双春年与无春年怎么区分?2021年是什么春年?就在昨天,我写了一篇关于寡妇年的文章,没想到大家热情高涨,关注度挺高的,还有的朋友私信问我这个双春年、有春年和无春年该怎么分,今…

乐橙本地录像回放不了_乐橙智能锁来告诉你:你家门真的安全吗?

你家门锁真的安全吗?你以为家门反锁就没事了?最近,看到一则新闻:女主人反锁门后出门喝喜酒,回家后发现家中遭窃,现金、珠宝首饰等全部遗失。还有那些专门行窃的小偷,他们会先按下房间门铃&#…

swift html编辑器,SwiftUI 的可视化编辑工具

原标题:SwiftUI 的可视化编辑工具作者:希德,iOS 开发者,前“有经验的前端开发工程师”,就职于网易严选。正在写书《Thinkable SwiftUI》(严重拖稿中)Session 10185: https://developer.apple.com/videos/play/wwdc2020…

如何备份数据_如何通过归档、备份和灾难恢复实现多云数据保护

点击上方“蓝色字体”,选择 “设为星标”关键讯息,D1时间送达!为了提高业务连续性并更好地控制成本,企业将在2020年向IT专业人员施加压力,要求他们打破内部和外部基础设施之间以及公共云提供商离散环境之间的孤岛。为此…

清华大学计算机专业高中选课系统,【清华大学计算机实验教学中心】_清华大学计算机实验教学中心...

计算机实验教学中心面向全校所有专业本科生开课,每年开出计算机实验教学课超过7000人门,完成实验学时数逾750000.计算机学科是一门理论与实践结合得非常紧密的学科,因此实验教学中心的教学指导小组在教学实践中归纳出一套计算机学科特有的实验教学模式:除了独立设置的部分专题实…

树展示 移动端_百度移动端开始用网站品牌名代替网址显示

最近,有站长发现,百度移动端最近做了部分改版:移动端部分网站域名开始逐渐被网站相关名称代替,PC端还是用域名展示,卢松松博客网站域名也被替换成网站品牌名显示!点击添加图片描述(最多60个字)编…

分享到facebook没有封面图_拾柒自制书封面图分享~

最近大家都在写书 我自己写完收集了很多图片和文字素材现在拿出来分享给大家~希望你们可以用的到分享几张时候做封面的图片给大家哈!还有特别多文字素材 大家需要也可以分享给大家呀!祝大家都能幸福快乐❤️

桌面计算机盖帘,一种可调节高度的计算机显示器支架的制作方法

本实用新型涉及计算机硬件领域,尤其是一种可调节高度的计算机显示器支架。背景技术:随着科技的进步,社会的发展,人们的生活水平得到了很大的提高,计算机对人们已不再陌生,几乎每家必备一台。通常情况下&…

win10软件拒绝访问删不掉_Win10右键菜单添加“获取文件管理员权限”选项

文件访问被拒绝,你需要TrustedInstaller提供的权限才能对此文件进行更改/文件访问被拒绝,你需要权限才能执行此操作/你需要提供管理员权限才能移动此文件”两种方案一长期为Win10右键菜单添加“获取文件管理员权限”选项 - Windows10.Pro​www.windows10…

db2中null和空值的区别_MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?

作者:极客小俊 一个专注于web技术的80后我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人!知乎极客小俊,官方首发原创文章浅谈 NULL 和 空值的区别NULL也就是在字段中存储NULL值空字符串值也就是字段中存储空字符()我们来通过测…