当前位置: 首页 > news >正文

桂林小程序制作郑州seo优化顾问

桂林小程序制作,郑州seo优化顾问,wordpress 网站实例,dede网站后台打不开关于安卓SVGA浅尝(二)加载数据 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项…

关于安卓SVGA浅尝(二)加载数据

请添加图片描述

相关链接

SVGA官网
SVGA-github说明文档

背景

项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中用到了svga的动画,因此,就有了这一系列的文章。

实现

对于svga的加载方法,有以下几种:
(1)decodeFromURL()
(2)decodeFromAssets()

对于(1)方法,就是从网络url加载一个url并在本地显示的意思。方法(2),就是读取本地assets文件进行显示。
方法(1)的实现逻辑,具体如下:
1、对传入的数据进行一个数据转换,得出一个数据缓存的key值。
2、若key值对应的缓存存在,则直接加载数据(区分是默认缓存路径还是其他缓存路径)
3、否则进行网络请求,通过HttpURLConnection请求写入得出一个ByteArrayInputStream对象后回调外部,执行
SVGAVideoEntity对象的封装后,回调出外部并交由外部执行。(这里得出ByteArrayInputStream后的逻辑,和
decodeFromAssets()方法读取文件后的逻辑,是一致的,都是调用decodeFromInputStream()这个防范进行处理)


而最后通过“流”到构建出“SVAVideoEntity”过程中,构造方法有一段这样的代码:

    constructor(entity: MovieEntity, cacheDir: File, frameWidth: Int, frameHeight: Int) {this.mFrameWidth = frameWidththis.mFrameHeight = frameHeightthis.mCacheDir = cacheDirthis.movieItem = entityentity.params?.let(this::setupByMovie)try {parserImages(entity)} catch (e: Exception) {e.printStackTrace()} catch (e: OutOfMemoryError) {e.printStackTrace()}resetSprites(entity)}

核心代码,就是parserImages(entity)这个方法,里面的实现源码如下:

    private fun parserImages(obj: MovieEntity) {obj.images?.entries?.forEach { entry ->val byteArray = entry.value.toByteArray()if (byteArray.count() < 4) {return@forEach}val fileTag = byteArray.slice(IntRange(0, 3))if (fileTag[0].toInt() == 73 && fileTag[1].toInt() == 68 && fileTag[2].toInt() == 51) {return@forEach}val filePath = generateBitmapFilePath(entry.value.utf8(), entry.key)createBitmap(byteArray, filePath)?.let { bitmap ->imageMap[entry.key] = bitmap}}}

可以看出,这里对传入对象的images集合类进行了遍历,最后通过createBitmap方法,创建了一个对象,
并且赋值给了SVAVideoEntity这个对象中的imageMap集合。
而对于parserImages方法中的入参“MovieEntity”,大部分都是通过方法“MovieEntity.ADAPTER.decode”进行对象构建。
这个方法是依赖于com.opensource.svgaplayer.proto这个包目录下的的方法在MovieEntity如下:

    @Overridepublic MovieEntity decode(ProtoReader reader) throws IOException {Builder builder = new Builder();long token = reader.beginMessage();for (int tag; (tag = reader.nextTag()) != -1;) {switch (tag) {case 1: builder.version(ProtoAdapter.STRING.decode(reader)); break;case 2: builder.params(MovieParams.ADAPTER.decode(reader)); break;case 3: builder.images.putAll(images.decode(reader)); break;case 4: builder.sprites.add(SpriteEntity.ADAPTER.decode(reader)); break;case 5: builder.audios.add(AudioEntity.ADAPTER.decode(reader)); break;default: {FieldEncoding fieldEncoding = reader.peekFieldEncoding();Object value = fieldEncoding.rawProtoAdapter().decode(reader);builder.addUnknownField(tag, fieldEncoding, value);}}}reader.endMessage(token);return builder.build();}

最后调用的方法builder.build()核心代码如下:

    @Overridepublic MovieEntity build() {return new MovieEntity(version, params, images, sprites, audios, super.buildUnknownFields());}

可以看出,整个过程,就是通过类型的判断,然后构建出对应类型的一个自定义数据对象,也就是我们的MovieEntity对象。


整个大体的加载实现思路,可以简单地描述如下:
(1)传入资源url/路径,调用对应加载方法进行加载
(2)区分网络加载还是本地加载,网络加载会先走缓存逻辑,否则直接网络io进行加载
(3)通过加载方法,最后都会生成一个IO流,传入一个处理流的通用方法里面,进行MovieEntity对象构建,回调
(4)最后通过SVGADrawable的构造,设置给SVGAImageView对象,最后调用SVGAImageView对象的startAnimation()方法,即可显示动画。


上述就是svga文件,加载到显示的整体流程,至于其中的细节,如缓存key的生成,MovieEntity对象构造,可以拉官方module
的代码进行研究。

关于svga更多的源码阅读,将会在后面的文章一一描述,本次文章先到这里。

that’s all--------------------------------------------------------------------------------

http://www.hrbkazy.com/news/46459.html

相关文章:

  • 新乡做网站推广宁波优化网站哪家好
  • 网站后台加什么后缀微信营销方式有哪些
  • 建设部网站1667号公告站长之家seo
  • 国外电子政务j建设与我国电子政务网站建设对比怎么做产品推广和宣传
  • 门户网站设计方案网络营销的分类
  • 怎么批量修改wordpress文章内容网店关键词怎么优化
  • 大连做网站孙晓龙山西疫情最新情况
  • 肥乡专业做网站谷歌play
  • 免费做效果图的网站免费观看短视频的app软件推荐
  • 网站建设项目功能需求分析报告如何做网络宣传推广
  • 怎建立自己网站做淘宝客霸屏seo服务
  • 北京网站制作培训班界首网站优化公司
  • 鹤壁网站制作互联网营销策划
  • 桥东网站建设外贸营销型网站建设公司
  • java快速建站系统推广普通话手抄报内容资料
  • 工信部 网站备案规定google学术搜索
  • 通过门户网站做单点登录SAP免费发布外链
  • 筛网怎么做网站推广网站的方法
  • 如何做电商网站首页日本关键词热搜榜
  • 哪里有网站开发服务手机网站制作
  • 隆回网站建设制作软文编辑
  • 有什么做酒和水果茶教程的网站天堂网长尾关键词挖掘网站
  • 商城网站制作 价格网址域名查询ip地址
  • 做百度网站接到多少客户电话淘宝标题优化工具推荐
  • 辽宁建设工程信息网如何报名优化模型
  • 做淘宝导航网站友情链接代码
  • 网站公安备案网址产品怎么做市场推广
  • 网站策划厂网上哪里可以免费打广告
  • 如何找企业联系做网站怎么做推广网络
  • 网站开发教程pdf网站seo推广公司靠谱吗