<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[走向远方]]></title><description><![CDATA[是男儿总要走向远方，走向远方是为了让生命更辉煌]]></description><link>https://blog.youkuaiyun.com/u012964944</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u012964944]]></copyright><item><title><![CDATA[Androids——日常开发工具和组件集合]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/92830996</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/92830996</guid><author>u012964944</author><pubDate>Wed, 19 Jun 2019 14:44:41 +0800</pubDate><description><![CDATA[Androids
Androids是本人根据平时的项目实践经验，为了提高Android开发效率而写的一个工具SDK；里面提供了一些工具类以及自定义View，可在实际项目开发时直接使用。

使用
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

depend...]]></description><category></category></item><item><title><![CDATA[瓦片地图加载框架——TiledMapView]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/89512603</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/89512603</guid><author>u012964944</author><pubDate>Thu, 25 Apr 2019 11:30:54 +0800</pubDate><description><![CDATA[有幸参与过一个简易地理信息系统（GIS）的开发，学到了不少地理信息相关的知识，便想要开发一个关于瓦片地图加载的开源库，跟大家一起分享交流。
TiledMapView
Android瓦片地图加载，支持多种投影，包括Web墨卡托投影，经纬度直投及自定义投影等；支持定位，添加图层和覆盖物。


用法
Gradle
allprojects {
    repositories {
        ...
...]]></description><category></category></item><item><title><![CDATA[涂鸦框架的优化——解决绘制时的卡顿问题，纵享丝滑]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/89211683</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/89211683</guid><author>u012964944</author><pubDate>Thu, 11 Apr 2019 15:20:47 +0800</pubDate><description><![CDATA[前言
喜大普奔，涂鸦框架Doodle迎来重大更新!
V5.5: 增加优化绘制的选项，可优化绘制速度和性能，纵享丝滑。
真是太不容易了！
其实在很早之前，笔者就已经感受到涂鸦时的卡顿，特别是随着涂鸦越多卡顿越明显，奈何当时心有余而力不足，一直找不到最佳的解决方法。直到最近灵感爆发，终于解决之，纵享丝滑！
问题的初步解决
当涂鸦越来越多时，操作时的卡顿越明显，同时也导致涂鸦的轨迹不够圆滑。初步分析是因...]]></description><category></category></item><item><title><![CDATA[OverScroll弹性滚动和惯性滚动效果的实现原理——CoordinatorLayout+Behavior]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/88966927</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/88966927</guid><author>u012964944</author><pubDate>Tue, 02 Apr 2019 11:28:30 +0800</pubDate><description><![CDATA[前面介绍了OverScroll的使用，没看过文章的同学可以先了解下《类似微信首页弹性滚动和惯性滚动效果的实现——OverScroll》
接下来介绍OverScroll的实现原理。
CoordinatorLayout
CoordinatorLayout是在Support 包中功能强大的布局容器，它本质是一个 FrameLayout，然而它允许开发者通过自定义Behavior协调各个子view,实现各...]]></description><category></category></item><item><title><![CDATA[类似微信首页弹性滚动和惯性滚动效果的实现——OverScroll]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/88601863</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/88601863</guid><author>u012964944</author><pubDate>Sat, 16 Mar 2019 17:30:10 +0800</pubDate><description><![CDATA[OverScroll
利用CoordinatorLayout+Behavior实现列表弹性滚动和惯性滚动效果(类似微信首页)，支持水平和垂直方向的滚动，效果如下：



Usage 用法
Gradle
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
 
d...]]></description><category></category></item><item><title><![CDATA[Android文本过长时根据关键字省略内容Ellipsize]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/88224680</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/88224680</guid><author>u012964944</author><pubDate>Wed, 06 Mar 2019 11:09:56 +0800</pubDate><description><![CDATA[有时候我们需要根据关键字截断文本内容，省略多余部分，比如微信搜索聊天记录时会在关键字的前后进行截断．

处理方式和逻辑见如下代码和注释：
private static void ellipsizeByKeyword(final TextView textView, String content, String keyword, boolean ignoreCase) {
        TextP...]]></description><category></category></item><item><title><![CDATA[Android支持多行文本省略Ellipsize]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/87892658</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/87892658</guid><author>u012964944</author><pubDate>Sat, 23 Feb 2019 15:12:48 +0800</pubDate><description><![CDATA[根据关键字省略
有时候我们需要根据关键字省略内容，比如微信搜索聊天记录时会在关键字的前后进行省略．

处理方式和逻辑见如下代码和注释：
private static void ellipsizeByKeyword(final TextView textView, String content, String keyword, boolean ignoreCase) {
        TextPa...]]></description><category></category></item><item><title><![CDATA[在规定区域内自动调整文字位置]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/86725367</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/86725367</guid><author>u012964944</author><pubDate>Thu, 31 Jan 2019 20:26:31 +0800</pubDate><description><![CDATA[问题
最近在做一个需求，就是涂鸦时，在绘制的图形旁边通过文字显示相关信息．先给大家看看最终的效果：

一开始的时候被这个问题难倒了，怎么找到合适的位置显示文字信息，让它们既不超出显示范围，又互不重叠？
解决方案
如果考虑不能重叠的问题，就需要在图形四周的位置遍历一遍直到没有跟其他文字重叠，加上绘制的图形是可以移动问题，这样问题就更复杂了．于是我只能简单化，寻找代价低又基本能满足要求的方式．
首先，...]]></description><category></category></item><item><title><![CDATA[Android涂鸦画板原理详解——从初级到高级（二）]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/83420038</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/83420038</guid><author>u012964944</author><pubDate>Fri, 26 Oct 2018 19:58:14 +0800</pubDate><description><![CDATA[前言
前面写了《Android涂鸦画板原理详解——从初级到高级（一）》，讲了涂鸦原理初级和中级的应用，现在讲解高级应用。如果没有看过前面一篇文章的同学，建议先去看看哈。
准备
高级涂鸦涉及到图片操作，包括对图片进行缩放移动、涂鸦等，这里涉及到矩阵的变换。关于矩阵变换的知识，请查看我的另一篇文章《浅谈矩阵变换——Matrix》。根据文中的介绍，接下来使用变换坐标系的空间想象去理解涂鸦中涉及到的矩阵变...]]></description><category></category></item><item><title><![CDATA[从显示一张图片开始学习OpenGL ES]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/82788620</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/82788620</guid><author>u012964944</author><pubDate>Thu, 20 Sep 2018 15:51:59 +0800</pubDate><description><![CDATA[前言

网上很多介绍OpenGL ES的文章，但由于OpenGL ES内容太多，所以这些文章难免过于臃肿杂乱，很难抓住重点，对于初学者来说最后还是云里雾里。很多人(包括笔者本人)开始深入了解OpenGL ES是因为其涉及到实时滤镜的应用，通常都会参考开源框架GPUImage的实现。如果没有掌握基本的OpenGL Es的开发知识，很难弄懂其中代码缘由。

目前很流行的短视频特效处理也有涉及到Open...]]></description><category></category></item><item><title><![CDATA[Android涂鸦画板原理详解——从初级到高级（一）]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/82703684</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/82703684</guid><author>u012964944</author><pubDate>Fri, 14 Sep 2018 17:00:25 +0800</pubDate><description><![CDATA[准备

前段时间，发布了多功能画板&amp;amp;开源涂鸦框架Doodle，得到了一些小伙伴的关注。但由于框架代码较多，一开始较难理解，有不少人询问了相关的实现细节。我发现不少初学者对基本的涂鸦原理不熟悉，因此我决定写一些简单的例子，用于说明最基本的的涂鸦原理，这也是多功能画板&amp;amp;开源涂鸦框架Doodle最核心的地方。

好的，在讲解之前，我希望小伙伴们对View的绘制流程有一定的了解，还不熟悉的...]]></description><category></category></item><item><title><![CDATA[Android涂鸦框架Doodle——仿微信图片编辑（多功能画板）]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/81204133</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/81204133</guid><author>u012964944</author><pubDate>Thu, 26 Jul 2018 11:22:30 +0800</pubDate><description><![CDATA[前言

很久之前做了一个叫Graffiti的涂鸦项目，放在了github上，得到了不少朋友的反馈，也一直有去维护。限制于个人能力水平，一开始并没有过多考虑框架的问题，导致越到后面，代码越臃肿，添加新功能也越复杂，难于拓展。（自己代码，哭着也要写完~~）

在经过了一段时间的历练后，终于意识到了项目框架的重要性，代码重构必不可少。于是，克服了种种困难，终于完成了代码重构！功能强大、可自定义和可扩展的...]]></description><category></category></item><item><title><![CDATA[如何快速阅读并分析Android源码]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/80005268</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/80005268</guid><author>u012964944</author><pubDate>Thu, 19 Apr 2018 19:02:06 +0800</pubDate><description><![CDATA[很多时候为了解决一个问题必须先理解Android系统的运行原理，这时候就得阅读应用层框架的源码。学会阅读系统源码或者他人的代码，这是研发必备的技能之一，只有了解别人写的东西才能在他之上更好的行事，同时也能去学习和借鉴他人优秀的代码思想。

那么，如何阅读并分析Android源码呢？

这里我只讲一些初级的、基础的方法，很快就可以上手，不需要下载和编译系统源码。

我们下载Android SDK的时...]]></description><category></category></item><item><title><![CDATA[浅谈矩阵变换——Matrix]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/77824768</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/77824768</guid><author>u012964944</author><pubDate>Tue, 05 Sep 2017 00:33:14 +0800</pubDate><description><![CDATA[矩阵变换在图形学上经常用到。基本的常用矩阵变换操作包括平移、缩放、旋转、斜切。




每种变换都对应一个变换矩阵，通过矩阵乘法，可以把多个变换矩阵相乘得到复合变换矩阵。




矩阵乘法不支持交换律，因此不同的变换顺序得到的变换矩阵也是不相同的。


事实上，图像处理时，矩阵的运算是从右边往左边方向进行运算的。这就形成了越在右边(右乘)的矩阵，越先运算(先乘)，反之亦然]]></description><category></category></item><item><title><![CDATA[View的绘制流程]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/77744549</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/77744549</guid><author>u012964944</author><pubDate>Thu, 31 Aug 2017 16:59:32 +0800</pubDate><description><![CDATA[View绘制的三大流程主要指：measure(测量)、layout(布局)、draw(绘制)。measure过程中确定View的尺寸（即宽高），layout过程中确定View的位置（即上下左右的位置），draw过程确定View显示的内容。在开发中，通常都是在Activity的onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局。...]]></description><category></category></item><item><title><![CDATA[Android事件分发机制（一）]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/77673857</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/77673857</guid><author>u012964944</author><pubDate>Tue, 29 Aug 2017 15:29:33 +0800</pubDate><description><![CDATA[当手指触摸屏幕后会产生一系列的事件（如点击DOWN、移动MOVE、抬起UP等），事件的信息记录在MotionEvent（手势事件）对象中。这里说的事件分发机制，其实指的是MotionEvent的分发过程。当一个MotionEvent产生了以后，系统需要把这个事件传递给一个具体的View(ViewGroup继承自View)，这个传递的过程就是事件分发过程。在这里先明确的说一下，当我们点击一个View...]]></description><category></category></item><item><title><![CDATA[Android消息机制基本原理]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/77621877</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/77621877</guid><author>u012964944</author><pubDate>Sun, 27 Aug 2017 18:01:04 +0800</pubDate><description><![CDATA[先看一段程序，在主线程里面开启了无限循环，处理消息队列里面的消息。public class Test {    private static BlockingQueue<Message> messageQueue; // 阻塞队列    public static void main(String[] args) throws InterruptedException {        messag]]></description><category></category></item><item><title><![CDATA[Android滚动选择器——水平滚动]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/73189206</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/73189206</guid><author>u012964944</author><pubDate>Tue, 13 Jun 2017 18:24:03 +0800</pubDate><description><![CDATA[前言前面我们讲解了滚动选择器的实现原理，并实现了字符串滚动选择器和图片选择器。没看过的同学建议先去了解一下： 
《Android自定义view——滚动选择器》 
《android图片滚动选择器的实现》这些滚动选择器的滚动方向都是垂直的。今天我们在此基础上增加可以水平滚动的选择器。效果如下： 
实现对父类ScrollPickerView进行改进，参照垂直滚动，添加跟水平滑动相关的变量。 private]]></description><category></category></item><item><title><![CDATA[android图片滚动选择器的实现]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/70172885</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/70172885</guid><author>u012964944</author><pubDate>Sat, 15 Apr 2017 18:02:28 +0800</pubDate><description><![CDATA[图片选择器的实现，以及通过选择器实现老虎机效果。 老虎机提供了三种图片绘制模式：填充、居中、指定大小。]]></description><category></category></item><item><title><![CDATA[android图片涂鸦——旋转与文字功能的实现原理]]></title><link>https://blog.youkuaiyun.com/u012964944/article/details/62889219</link><guid>https://blog.youkuaiyun.com/u012964944/article/details/62889219</guid><author>u012964944</author><pubDate>Mon, 20 Mar 2017 16:49:00 +0800</pubDate><description><![CDATA[该项目的代码已经重构，采用了新框架，强烈建议查看《Android全新图片涂鸦框架Doodle——多功能、可自定义、可扩展》

（旧代码暂时不维护了，所以推荐还是使用最新框架吧！也希望大伙支持！！！）

点击移步到最新涂鸦框架&amp;gt;&amp;gt;&amp;gt;Doodle

点击移步到最新涂鸦框架&amp;gt;&amp;gt;&amp;gt;Doodle

点击移步到最新涂鸦框架&amp;gt;&amp;gt;&amp;gt;Doodle​​​​​​​​...]]></description><category></category></item></channel></rss>