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

html购物网站网站开发教程H5

html购物网站,网站开发教程H5,域名网站有哪些,深圳福永关于安卓SVGA浅尝#xff08;二#xff09;加载数据 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发#xff0c;都会和动画打交道#xff0c;动画的方案选取#xff0c;就有很多选择。如Json动画#xff0c;svga动画#xff0c;gif等等。各有各的优势。目前项…关于安卓SVGA浅尝二加载数据 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发都会和动画打交道动画的方案选取就有很多选择。如Json动画svga动画gif等等。各有各的优势。目前项目中用到了svga的动画因此就有了这一系列的文章。 实现 对于svga的加载方法有以下几种 1decodeFromURL() 2decodeFromAssets() 对于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) {returnforEach}val fileTag byteArray.slice(IntRange(0, 3))if (fileTag[0].toInt() 73 fileTag[1].toInt() 68 fileTag[2].toInt() 51) {returnforEach}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.hkea.cn/news/14389731/

相关文章:

  • 国外免费网站网络营销的本质
  • 手机网站开发技术pdf济南网站建设与优化
  • 重庆企业的网站建设做国际贸易网站要什么条件
  • 手机网站建设可行性分析wordpress拉
  • 成为网站有哪些网址?在线看视频网站怎么做
  • 微信网站制作免费h5营销型网站功能
  • 新闻类网站开发难点网站商品图片尺寸
  • 象山企业门户网站建设网站开发敬请期待
  • wordpress建图片网站公司网站做么做百度排名
  • nanopi neo做网站seo优化推广工程师招聘
  • 影响网站pr的因素有哪些没有网站如何做淘宝客
  • 网站发文超链接怎么做做网站架构需要什么工具
  • 网站开发培训视频在网上可以做宣传的有那些网站
  • 新手如何做网站推广网站的留言功能
  • 东莞网站推广的公司做网站开发很赚钱吗
  • 新网站 不稳定软件定制开发
  • 网站建设mp4背景做钢材销售客户哪里去开发网站
  • 网站的规划网站备案回访问题
  • 沈阳红方城网站建设农产品网站策划
  • 网站建设与维护工作内容单机游戏
  • ps做图 游戏下载网站有哪些内容九江市广安建设工程有限公司网站
  • 手机网站建设的公司排名未成年人思想道德建设网站
  • 德州建设网站有有个性的个人网站
  • 做的最成功的个人网站深圳免费网站制作哪个好
  • 鹤岗做网站做房产网站需要多少钱
  • 做网站一般需要哪些文件夹云南网站排名
  • 比较好的微网站开发平台微信登录wordpress免费
  • 相亲网站上做it的骗术物联网官网入口
  • 沈阳电力建设总公司网站自媒体135网站
  • 莱芜网站设计公司网站开发进度确认单