默认图片居中,以 CENTER_INSIDE 的方式显示。双击缩放,放大到比 CENTER_CROP 略大。要适配双击的位置。放大后可以滑动显示。支持捏撑手势缩放这是一个 Demo 性质的项目,不会处理细节问题。代码比较简单,就不上传完整源码了,主要记录各个需求实现的思路。图片居中显示这个需求没什么好说的,注意一下计算缩放倍数的时候要考虑图片与 View 的长宽比。通常算法如下:if (w....
顾名思义,测量与布局是两个分开的流程。首先从根 View 开始递归调用子 View 的 measure() 方法来测量。然后再从根 View 开始递归逐级调用子 View 的 layout() 方法来布局。此时会把测量的结果,即子 View 的位置与尺寸传递过去,子 View 需要保存这些属性。为什么要把测量与布局分开?因为测量不是可以一次就完成的,部分情况下需要两次甚至更多。例如 Line...
本质与区别Bitmap 本质上是一个位图数据,它只是单纯地存储一张图片,仅此而已。Drawable 这是一个上层的绘制工具,有点类似 View,可以调用 Canvas 进行绘制。但 View 还承担布局、测量等工作,Drawable 就轻量多了,只负责绘制。Drawable 默认没有颜色信息,甚至连大小都没有,所以记得先设置大小后再进行绘制,然后才有了像素数据。比如:canvas.drawB...
属性动画是 Android 中最基本最简单最方便的动画,自然也是限制最多的一种。它仅能使用几种内置的方式进行变换,包括:平移、缩放、透明度、旋转,没了。允许使用插值器(非线性动画)。ViewPropertyAnimator 的使用非常简单:view.animate() // 返回一个 ViewPropertyAnimator 对象 .translationX(200.dp) .rot...
既然标题叫「高级绘制」,对于那些比较基本的简单的方法这里就不赘述了。Paint路径效果比如我们要绘制一个仪表盘:不难看出由三部分组成:边框、刻度、指针。其中边框与指针都可以比较轻松地画出来,但刻度缺比较头疼。有一个粗暴的办法:自己用三角函数计算每一格的起止坐标,套一个 for 循环绘制,但这样费时费力而且效率也比较低。Paint.pathEffect 专门用于这种需求,它有点类似 PS 中的...
传送门According to Wikipedia, every level, except possibly the last, is completely filled in a complete binary tree, and all nodes in the last level are as far left as possible. It can have between 1 ...
发出请求我们从 Call.enqueue 开始研究源码,宏观上了解一下 okhttp 如何把请求发出去。轻松发现对于异步请求,统一转换成了 AsyncCall 交给 Dispatcher 来执行。Dispatcher 会控制最大并发数与针对某一 host 的最大并发数。对于第二个需求,猜测可能需要一个类似 Map 的数据结构来存储 host 与当前已有的请求数,但实际上 okhttp 直接把...
请求方法请求方法 Body幂等GET获取资源 YPOST增加或修改资源Y PUT修改资源YYDELETE删除资源 YHEAD同 GET;响应报文没有 Body响应报文也没有Y状态码详细列表状态码描述1xx临时消息100继续发送101协议切换 e.g. http1.1 -> http2 2xx成功3xx重定向4xx客户端错误5xx服务器错误HeaderHeader: 用于主机确定子主机...