Android学习之路
文章平均质量分 90
xifei66
你永远不知道自己的潜力有多大...
展开
-
在AS上用C语言(JNI方式)播放gif动图
Android中gif播放一般是比较耗内存的操作,Android中的ImageView不能直接播放gif,使用Java方式实现的gif播放的是非常耗内存的,就算是使用Glide这种优秀的三方库,也是一样的,所以项目中有gif播放需求,尤其是列表中有gif播放的,建议使用JNI的实现方式。创建工程先将基本的功能,例如申请权限,按钮点击等 用Java实现,activity_main.xml 如下:<LinearLayout xmlns:android="http://schemas.原创 2020-11-26 10:31:25 · 834 阅读 · 0 评论 -
Android 使用svg构造交互式中国地图
1. 概念什么是svg即Scalable Vector Graphics 可伸缩矢量图形SVG的W3C的解释: http://www.w3school.com.cn/svg/svg_intro.asp什么是矢量图像,什么是位图图像?1、矢量图像:SVG是W3C 推出的一种开放标准的文本式矢量图形描述语言,他是基于XML的、专门为网络而设计的图像格式,SVG是一种采用XML来描述二维图形的语言,所以它可以直接打开xml文件来修改和编辑。2、位图图像:位图图像的存储单位是图像上每一点的像素值,原创 2020-11-12 11:39:26 · 787 阅读 · 0 评论 -
MMKV原理详解
性能对比 我们将 MMKV 和 SharedPreferences、SQLite 进行对比, 重复读写操作 1k 次。相关测试代码在Android/MMKV/mmkvdemo/。结果如下图表。 单进程性能 可见,MMKV 在写入性能上远远超越 SharedPreferences & SQLite,在读取性能上也有相近或超越的表现。 多进程性能可见,MMKV 无论是在写入性能还是在读取性能,都远远超越 MultiProcessSharedPreference..原创 2020-09-30 16:19:25 · 3798 阅读 · 0 评论 -
MMKV学习和使用
MMKV介绍 MMKV 是腾讯开源的一款基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强,从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。 GitHub地址:https://github.com/Tencent/MMKV 为什么要替代SharedPreferences? 1,数据加密。 在 Android 环境里,数据加密是非常必须的,SP实际上是把键值对放到本地文件中进行存储。如果...原创 2020-09-30 15:51:39 · 2587 阅读 · 0 评论 -
事件分发机制原理 之二
常见事件既然是事件分发,总要有事件才能分发吧,所以我们先了解一下常见的几种事件。根据面向对象思想,事件被封装成 MotionEvent 对象,由于本篇重点不在于此,所以只会涉及到几个与手指触摸相关的常见事件:事件 简介 ACTION_DOWN 手指 初次接触到屏幕 时触发。 ACTION_MOVE 手指 在屏幕上滑动 时触发,会会多次触发。 ACTION_UP 手指 离开屏幕 时触发。 ACTION_CANCEL 事件 被上层拦截 时触发。 对于原创 2020-09-28 11:49:13 · 221 阅读 · 0 评论 -
事件分发机制原理 之一
为什么要有事件分发机制?安卓上面的View是树形结构的,View可能会重叠在一起,当我们点击的地方有多个View都可以响应的时候,这个点击事件应该给谁呢?为了解决这一个问题,就有了事件分发机制。如下图,View是一层一层嵌套的,当手指点击 View1 的时候,下面的ViewGroupA、 RootView 等也是能够响应的,为了确定到底应该是哪个View处理这次点击事件,就需要事件分发机制来帮忙。View的结构:我们的View是树形结构的,在上一个问题中实例View的结构大致如下:l原创 2020-09-28 11:44:59 · 251 阅读 · 0 评论 -
Path之PathMeasure 进阶篇
Path & PathMeasure顾名思义,PathMeasure是一个用来测量Path的类,主要有以下方法:构造方法方法名 释义 PathMeasure() 创建一个空的PathMeasure PathMeasure(Path path, boolean forceClosed) 创建 PathMeasure 并关联一个指定的Path(Path需要已经创建完成)。 公共方法返回值 方法名 释义 void setPath(P.原创 2020-09-28 11:05:15 · 1020 阅读 · 0 评论 -
Path方法详解 进阶篇
作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之间的直线到Path 闭合路径 close 连接第一个点连接到最后一个点,形成一个闭合区域 添加内容 addRect, addRoundRect, addOval, addCircle, addP原创 2020-09-27 17:11:40 · 3132 阅读 · 0 评论 -
Path之贝塞尔曲线 进阶篇
一.Path常用方法表为了兼容性(偷懒) 本表格中去除了在API21(即安卓版本5.0)以上才添加的方法。忍不住吐槽一下,为啥看起来有些顺手就能写的重载方法要等到API21才添加上啊。宝宝此刻内心也是崩溃的。作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之原创 2020-09-27 10:41:07 · 955 阅读 · 0 评论 -
Path之基本操作 进阶篇
一.Path常用方法表为了兼容性(偷懒) 本表格中去除了部分API21(即安卓版本5.0)以上才添加的方法。作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之间的直线到Path 闭合路径 close 连接第一个点连接到最后一个点,形成一个闭合原创 2020-09-24 16:26:05 · 1752 阅读 · 0 评论 -
Canvas之图片文字 进阶篇
接着上一篇文章继续学习1.绘制图片绘制有两种方法,drawPicture(矢量图) 和 drawBitmap(位图),接下来我们一一了解。(1)drawPicture使用Picture前请关闭硬件加速,以免引起不必要的问题!使用Picture前请关闭硬件加速,以免引起不必要的问题!使用Picture前请关闭硬件加速,以免引起不必要的问题!在AndroidMenifest文件中application节点下添上 android:hardwareAccelerated="false"以关闭原创 2020-09-24 14:36:26 · 981 阅读 · 0 评论 -
Android如何关闭硬件加速
硬件加速Android 3.0 (API level 11), 开始支持所有的View 的canvas都会使用GPU,但是硬件的加速会占有一定的RAM。在API >= 14上,默认是开启的,如果你的应用只是标准的View和Drawable,全局都打开硬件加速,是不会有任何问题的。然而,硬件加速并不支持所有的2D画图的操作,这时开着它,可能会影响到你的自定义控件或者绘画,出现异常等行为,所以android对于硬件加速提供了可选性如果你的应用执行了自定义的绘画,可以通过在真机上测试开启硬件原创 2020-09-24 11:43:21 · 1904 阅读 · 0 评论 -
Canvas之绘制基本形状
一.Canvas简介Canvas我们可以称之为画布,能够在上面绘制各种东西,是安卓平台2D图形绘制的基础,非常强大。一般来说,比较基础的东西有两大特点:1.可操作性强:由于这些是构成上层的基础,所以可操作性必然十分强大。2.比较难用:各种方法太过基础,想要完美的将这些操作组合起来有一定难度。不过不必担心,本系列文章不仅会介绍到Canvas的操作方法,还会简单介绍一些设计思路和技巧。二.Canvas的常用操作速查表操作类型 相关API 备注 绘制颜色 dra.原创 2020-09-23 17:51:04 · 611 阅读 · 0 评论 -
自定义View分类与流程 基础篇
一.自定义View分类我将自定义View分为了两类(sloop个人分类法,非官方):1.自定义ViewGroup自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout,包含有子View。例如:应用底部导航条中的条目,一般都是上面图标(ImageView),下面文字(TextView),那么这两个就可以用自定义ViewGroup组合成为一个Veiw,提供两个属性分别用来设置文字和图片,使用起来会更加方便。2.自定义V原创 2020-09-23 16:37:18 · 165 阅读 · 0 评论 -
Android 屏幕(View)坐标系统 基础篇
一.屏幕坐标系和数学坐标系的区别由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是稍微有点差别的,详情如下:(PS:其中的∠a 是对应的,注意y轴方向!)实际屏幕上的默认坐标系如下: 假设其中棕色部分为手机屏幕二.View的坐标系注意:View的坐标系统是相对于父控件而言的. getTop(); //获取子View左上角距父View顶部的距离 getLeft(); ..原创 2020-09-23 15:29:53 · 1377 阅读 · 0 评论 -
多进程 Webview 实战
"Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView"以上为官方给出的说明,用白话来说就是,一个app中,如果有多个进程A、B、C,并且在A、B、C进程都是用到WebView的话,在Android P 以及之后的版本中运行会报错: //Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView //为其它进程webView设置目录 @RequiresApi(api = 28) .原创 2020-09-21 16:43:08 · 3479 阅读 · 0 评论 -
Android WebView使用常见问题以及解决方案(高级)
总结下WebView的一些使用方法提醒:我们在使用WebView是最好不要把WebView写在xml中,直接用如下动态加载WebView方法更优WebView webView = new WebView();frameLayout.addView(webView);//动态加载1.打开网页时调用系统浏览器, 而没有在本WebView中显示。我们可以调用mWebView的setWebViewClient在本WebView中显示。mWebView.setWebViewClient(new.原创 2020-09-21 15:42:16 · 2605 阅读 · 2 评论 -
从简单使用到源码分析,一文搞懂Handler
Handler可以说小伙伴们用的非常多了,可以说Handler是支撑整个Android系统运行的基础,本质上Android系统都是由事件驱动的。而处理事件的核心就在于Handler。接下来我们就从简单的使用,到源码分析让你彻彻底底明白Handler的本质。不会再让你发出为什么Looper.loop不会堵塞主线程,Handler是如何切换线程等这类疑惑。简单使用一般是在主线程中实现一个Handler,然后在子线程中使用它。class HandlerActivity: AppCompatActiv转载 2020-09-10 16:54:47 · 129 阅读 · 0 评论 -
解决竖向RecyclerView嵌套横向RecyclerView时的滑动冲突
问题描述我们写瀑布流是,如果竖向RecyclerView嵌套横向RecyclerView,当滑动横向RecyclerView时,竖向的RecyclerView会抖动。事件分发总结dispatchTouchEventreturn true:表示该View内部消化掉了所有事件return false:表示事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费...原创 2020-04-16 10:14:28 · 4500 阅读 · 1 评论 -
Dagger2的使用
什么是Dagger2Dagger是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架,原来是由Square公司维护,现在由Google维护。 我们知道Dagger是一个依赖注入的框架,那么什么是依赖注入呢?我们在activity中有可能会用到很多很多的类,这些类要在activity中进行实例化,这样就导致我们的activity非常依赖这么多的类,这样的程...转载 2018-08-24 11:01:57 · 129 阅读 · 0 评论 -
LruCache(内存缓存)的原理
LruCache是android提供的一个缓存工具类,其算法是最近最少使用算法。它把最近使用的对象用“强引用”存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设定值之前就从内存中移除。其在API12被引进,低版本可以用support包中的类。 LruCache中Lru算法的实现就是通过LinkedHashMap来实现的。LinkedHashMap继承于H原创 2017-10-13 15:42:21 · 1079 阅读 · 0 评论