xUtils源码阅读(7)-GitDrawable

【源码阅读 | xe-utils源码 | 11】find 函数 - 寻找一个符合条件的值 本期阅读时长预计8分钟,可以学习到在浏览器环境不支持ES6的情况下,实现一个 find 函数 阅读详情

通常情况下,ImageView是不支持Gif动画的,所以我们要向支持Gif的话,必须自己来处理。

在这里我们就不是对Drawable的包装了,我们是对Drawable的重新实现。同时由于Gif具有动画,所以又同时实现了Runnable,Animatable接口。


源码:

public class GifDrawable extends Drawable implements Runnable, Animatable {

    private int byteCount;//数据大小
    private int rate = 300;//播放的频率,多长时间刷新一次
    private volatile boolean running;//是否正在运行

    private final Movie movie;//gif的具体内容
    private final int duration;//gif播放的时长
    private final long begin = SystemClock.uptimeMillis();

    public GifDrawable(Movie movie, int byteCount) {
        this.movie = movie;
        this.byteCount = byteCount;
        this.duration = movie.duration();
    }

    public int getDuration() {
        return duration;
    }

    public Movie getMovie() {
        return movie;
    }

    public int getByteCount() {
        if (byteCount == 0) {
            byteCount = (movie.width() * movie.height() * 3) * (5/*fake frame count*/);
        }
        return byteCount;
    }

    public int getRate() {
        return rate;
    }

    public void setRate(int rate) {
        this.rate = rate;
    }

    @Override
    public void draw(Canvas canvas) {
        try {
            int time = duration > 0 ? (int) (SystemClock.uptimeMillis() - begin) % duration : 0;
            movie.setTime(time);
            movie.draw(canvas, 0, 0);//git帧绘制
            start();
        } catch (Throwable ex) {
            LogUtil.e(ex.getMessage(), ex);
        }
    }

    @Override
    public void start() {
        if (!isRunning()) {
            running = true;
            run();
        }
    }

    @Override
    public void stop() {
        if (isRunning()) {
            this.unscheduleSelf(this);
        }
    }

    @Override
    public boolean isRunning() {
        return running && duration > 0;
    }

    @Override
    public void run() {
        if (duration > 0) {
            this.invalidateSelf();//页面失效
            this.scheduleSelf(this, SystemClock.uptimeMillis() + rate);//过会儿再重绘
        }
    }

    @Override
    public void setAlpha(int alpha) {

    }

    @Override
    public int getIntrinsicWidth() {
        return movie.width();
    }

    @Override
    public int getIntrinsicHeight() {
        return movie.height();
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
    }

    @Override
    public int getOpacity() {
        return movie.isOpaque() ? PixelFormat.OPAQUE : PixelFormat.TRANSLUCENT;
    }

}


【源码阅读 | xe-utils源码 | 10】clone 深拷贝(考虑多种数据类型) 本篇预计阅读时长10分钟,讲解了 xe-utils 中 clone 深拷贝源码的实现,支持多种数据类型。 阅读详情

相关推荐

GifImageView控件既可以显示网络下载的图片,也可以显示gif图片而且是网络下载的,挺好的东西,不是我写的,分享下赚点分

GifImageView控件既可以显示网络下载的图片,也可以显示gif图片而且是网络下载的,挺好的东西,不是我写的,分享下赚点分

Drawable动画实现

前言 Android中有很多有趣的简单几何元素自定义动画效果,比如圆形转圈这类加载动画都是很常见的,如果使用自定义的View来实现这种动画效果实际比较复杂而且很难在其他的View中复用。有种思路就是使用Drawable来实现动画效果,在把它作为View的前景或背景图设置上去,这样的动画效果就被封装到一个简单的Drawable,可以在不同的View之间重复使用。 属性动画实现 既然使用Dr...

xingzhong128的博客 3490

别再硬拔了!用这3个终端命令轻松搞定Mac上移动硬盘‘被程序占用’的问题

本文介绍了3个终端命令解决Mac上移动硬盘‘被程序占用’的问题,包括使用`diskutil list`定位硬盘、`lsof`查找占用进程以及`diskutil unmount`安全卸载。这些方法能有效避免数据风险,提升操作效率,特别适合开发者和技术爱好者。

weixin_33507732的博客 293

【亲测免费】 xe-utils 使用指南

xe-utils 是一个强大的 JavaScript 工具库,专为前端开发者设计。它提供了丰富的实用函数,覆盖数组、对象、字符串处理等众多日常开发中的高频需求。本项目遵循 MIT 开源协议,是高效解决前端日常问题的得力助手。 ## 项目快速启动 要开始使用 xe-utils,首先你需要将其添加到你的项目中。这里提供两种主流的引入方式: ### NPM 方式 如果你的项目基于 Node.js...

gitblog_00993的博客 1238

Mplus实战:如何用潜在类别分析(LCA)快速搞定心理学数据分类?

本文详细介绍了如何运用Mplus软件进行潜在类别分析(LCA),以快速处理心理学数据并识别内部异质性群体。文章从数据准备、Mplus语法编写、模型拟合与选择,到结果解读与高级应用(如纳入协变量),提供了完整的实战指南,帮助研究者从变量视角转向个体视角,有效挖掘数据中的潜在子类别。

weixin_28318011的博客 410

编译原理(东南大学)一:【编译原理期末冲刺救命笔记】速存!看完再上考场稳了!

本文详细介绍了编译原理的核心概念和流程,包括程序设计语言的分类、编译程序的各个阶段(如词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成)以及编译程序生成和构造的基础知识。文章还探讨了编译中的表格管理、出错处理和遍的概念,以及编译基础知识如高级语言、语法规则、字母表和符号串的运算。此外,文中还涉及文法与语言的关系,包括文法的概念、非终结符、终结符、产生式、推导和规约等。整体内容旨在为学习编译原理的学生提供全面的复习资料和考试准备指南。

一位搞嵌入式和前端的genius的博客 1027

【源码阅读 | xe-utils源码 | 02】判断Array类型

上一期讲了基础类型判断,唯独少了 Array 的判断,本期介绍源码中对 Array 类型的判断,并保证了兼容性和扩展性

weixin_42678675的博客 706

wps js宏获取工作簿、工作表、单元格的值、链接转图片、单元格区域数据转二维数组、保存工作簿的常用Excel操作

wps js宏入门看这里,我写了常用的js操作Excel的方法:获取工作簿对象、获取工作表对象、获取单元格的值、链接转图片、生成条形码图片、单元格区域数据转二维数组方法、保存工作簿、弹出输入框、YesNo选择框,助你从VBA转战JS。

huaermeier的博客 3万+

xe-utils 开源项目教程

xe-utils 是一个 JavaScript 工具库,提供了丰富的实用函数。以下是其主要目录结构: ``` xe-utils/ ├── dist/ │ ├── xe-utils.js │ ├── xe-utils.min.js ├── src/ │ ├── array.js │ ├── base.js │ ├── date.js │ ├── function.js │

gitblog_00101的博客 593

VS Code 配置 LaTeX 写作环境完全指南

本文详细介绍了如何在 VS Code 中配置 LaTeX 写作环境,涵盖了从安装必备组件到高级功能的全面指南。首先,用户需要安装 LaTeX 发行版(如 TeX Live 或 MiKTeX)和 VS Code 插件(如 LaTeX Workshop)。接着,通过修改 settings.json 和 keybindings.json 文件,用户可以自定义编译、查看快捷键等基础配置。文章还提供了高效写作技巧,如使用代码片段和多文件项目管理,并介绍了高级功能如反向同步、公式预览和参考文献管理。此外,针对常见问题(

weixin_70043030的博客 1984

使用Google Earth Engine下载JRC全球水体数据

通过Google Earth Engine平台和提供的源代码,研究人员和水资源管理者可以方便地获取和利用这一重要的水资源监测数据集,从而开展相关的研究和决策支持工作。要使用Google Earth Engine下载JRC全球水体数据,首先需要在Google Earth Engine平台上进行注册和登录。JRC全球水体数据是由欧洲联合研究中心开发的高分辨率全球水体分类数据集,覆盖了整个地球的陆地和水域。下载完成后,你可以使用各种遥感数据处理软件来打开和分析这些数据,以满足不同的研究和应用需求。

LrlDebug的博客 1158

Git 指令

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。Workspace:工作区(就是你在电脑里能看到的目录)Index / Stage:暂存区(一般存放在 “.git 目录下” 下的 index 文件(.git/index)中)

8023的博客 1332

按照CANoe模板制作seed&&key.dll

在canoe进行诊断测试的时候,在0x27服务中需要制作一个dll文件。可在canoe的诊断中进行加载,也可用于diva的自动化测试。 本文按照canoe提供的KeyGenDll_GenerateKeyEx模板制作。 KEYGENALGO_API VKeyGenResultEx GenerateKeyEx( const unsigned char* iSeedArray, /* Array for the seed [in] */ unsigned int

天赐好车的博客 6520

【数字孪生与仿真技术】14:数据驱动+机理模型:工业级混合建模实战(附MATLAB完整代码+案例解析)

摘要 本文针对工业建模中机理模型精度不足和数据驱动模型缺乏物理约束的痛点,提出混合建模技术作为解决方案。文章系统阐述了混合建模的3种主流架构(参数校正型、残差补偿型、组件替换型),结合清华大学催化裂化装置的实际案例,分析混合建模的工业应用价值。同时以连续搅拌反应釜(CSTR)为例,提供MATLAB环境下残差补偿型混合模型的完整实现代码,详细展示从机理模型构建到数据驱动补偿的全流程,并给出工程实践中的应对策略,为工业建模提供可落地的技术方案。 关键词 混合建模、机理模型、数据驱动、工业建模、MATLAB

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 622

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android中的Drawable基础与自定义Drawable

转载请注明链接:http://blog.youkuaiyun.com/feather_wch/article/details/79124608 本文要点: 1. 介绍Android中Drawable的相关知识点,并且介绍如何自定义Drawable。 2. Drawable能实现缩放、渐变、逐帧动画、静态矢量图、矢量图动画等功能 3. Drawable提供一种比自定义View更轻量级的...

feather(猎羽) 8万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 开源框架xUtils

git地址:https://github.com/wyouflf/xUtils/ xUtils简介 xUtils 包含了很多实用的android工具。 xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.2...

yihaoxue的博客 1084

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

github上xUtils工具的使用地址

https://github.com/wyouflf/xUtils

Java程序员命运之改变 1635

三思系列:重新认识Drawable

前言 关于三思系列 前一段时间,在某公众号看到了一篇关于splash页面动效的文章,具体为:将一个英文单词拆分为多个字母,散落在屏幕中,然后按照一定的路径回归,最终展示一段流光效果,完成splash页面。 当时文章中提到的做法是自定义View的实现。当时脑海中灵光一闪,感觉还是用Drawable来干这个事情更加合适。 记忆中,我曾经整理过一篇Drawable基础内容的文章,可惜丢失了,在开始干这件事情之前,我们把这一块内容再完整的梳理一遍。 这篇文章会比较长,先给出导图 Drawable的设计意图 A

leobert.lan的博客 395

Android加载Gif和ImageView的通用解决方案:android-gif-drawable:GifTextView(2)

Android加载Gif和ImageView的通用解决方案:android-gif-drawable:GifTextView(2) 附录文章1简介了如何在Android中使用android-gif-drawable解决gif加载的问题。事实上android-gif-drawable的使用方法和途径很多,不限于文章1中那样在上层Java代码中使用。 比如,最典型的一个常见场景,在Andr

Zhang Phil 4493

xUtils图片本地缓存使用

String cachePath = "" bitmapUtils = new BitmapUtils(this, cachePath); bitmapUtils.configDiskCacheEnabled(true);

u014083596的专栏 9651

xUtils3的使用

MainActivity 主要是调用xutils3的各个方法 1)xUtils3简介xUtils是目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能,下面来看看官方(https://github.com/wyouflf/xUtils3)对xUtils3的介绍:xUtils包含了很多实用的android工具;xUtils支持超大文件(超

Mr_liu的博客 1929

AnimationDrawable

尽量不要使用 AnimationDrawable,它在初始化的时候就将所有图片加载到内存中,特别占内存,并且还不能释放,释放之后下次进入再次加载时会报错。 说明: Android 的帧动画可以使用 AnimationDrawable 实现,但是如果你的帧动画中如果 包含过多帧图片,一次性加载所有帧图片所导致的内存消耗会使低端机发生 OOM 异常。帧动画所使用的图片要注意降低内存消耗,当图片比较大

achilles没有踵 1938

【源码阅读 | xe-utils源码 | 08】isDocument(涉及DOM的 nodeType)

本期源码非常简单!通过 isDocument 判断是否为 document 对象,也复习一下我们较少用的 nodeType 属性

weixin_42678675的博客 803

动画总结分析

动画的分类1.帧动画 2.补间动画 3.属性动画 帧动画:继承结构:–drawable     –DrawableContainer         –AnimationDrawable 可见:AnimationDrawable是继承的drawable。用法: 在drawable目录下定义一个XML动画文件,根节点为animation-list,中间节点为item(item设置好图

梅的专栏 926

Hi~重新认识一下Drawable!

/ 今日科技快讯 /3月4日,北京时间下午16点24分,美国太空探索技术公司SpaceX利用八手火箭,将第18批60颗星链卫星从肯尼迪航天中心39A发射台升空送入轨道。随后,火箭助...

郭霖 578
上一篇: xUtils源码阅读(6)-AsyncDrawable
下一篇: xUtils源码阅读(8)-ImageDecoder
wbzwind
博客等级 码龄19年 3粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值