<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lzy的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lylodyf</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lylodyf]]></copyright><item><title><![CDATA[NestedScrolling机制]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/84715807</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/84715807</guid><author>lylodyf</author><pubDate>Sun, 02 Dec 2018 15:29:42 +0800</pubDate><description><![CDATA[简介
NestedScrolling机制能够让父View和子View在滚动式进行配合，其基本流程如下：

当子view开始滚动之前，可以通知父View，让其先于自己进行滚动；
子View自己进行滚动；
子view滚动之后，还可以通知父view继续滚动

嵌套滑动的基本原理是在子控件接收到滑动一段距离的请求时, 先询问父控件是否要滑动, 如果父控件滑动了父控件就通知子控件它消耗了一部分滑动距离, 子...]]></description><category></category></item><item><title><![CDATA[Android Studio Gradle配置详解]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/81194163</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/81194163</guid><author>lylodyf</author><pubDate>Tue, 24 Jul 2018 23:06:16 +0800</pubDate><description><![CDATA[Gradle文件体系

Android工程通过gradle文件管理各项配置，gradle文件利用DSL（Domain Specific Language）语言描述配置， 
并使用Groovy语言处理编译逻辑。一个典型的Android工程结构如下： 


在这里gradle文件分布在几个不同的层级，Project层级以及Module层级。 


Project层级



settings.gradl...]]></description><category></category></item><item><title><![CDATA[Kotlin笔记-属性]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/80978956</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/80978956</guid><author>lylodyf</author><pubDate>Mon, 09 Jul 2018 23:12:44 +0800</pubDate><description><![CDATA[定义常量与变量

类中声明的属性，一定要初始化，否则会编译错误。除非你对属性使用了abstract进行修饰。  



    var name: String = &quot;&quot;
    //abstract var size : Int//必须在抽象类中使用

    var boss = &quot;L&quot;

可变变量定义：var 关键字  


  var &amp;lt;标识符&amp;gt; : &amp;lt;类型&amp;gt; = ...]]></description><category></category></item><item><title><![CDATA[Kotlin笔记-类]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/80978949</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/80978949</guid><author>lylodyf</author><pubDate>Mon, 09 Jul 2018 23:12:06 +0800</pubDate><description><![CDATA[类修饰符



// 属性修饰符
annotation  //注解类
abstract   //抽象类
final     //类不可继承，默认属性
enum     //枚举类
open    //类可继承，类默认是final的

// 访问权限修饰符
private   //仅在同一个文件中可见
protected //同一个文件中或子类可见
public    //所有调用的地方都可见
in...]]></description><category></category></item><item><title><![CDATA[判断RecyclerView滑动到底部和顶部]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/80950000</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/80950000</guid><author>lylodyf</author><pubDate>Sat, 07 Jul 2018 11:33:11 +0800</pubDate><description><![CDATA[方法1



mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                su...]]></description><category></category></item><item><title><![CDATA[ConstraintLayout的完全解析]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/80212127</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/80212127</guid><author>lylodyf</author><pubDate>Thu, 10 May 2018 00:34:30 +0800</pubDate><description><![CDATA[ConstraintLayout也就是约束布局，通过约束来实现布局，感觉有点类似与RelatedLayout，但是比之更加的强大，使用ConstraintLayout可以减少布局的嵌套层数，尽量的扁平化。传统的布局我们都是采用xml来操作，但是使用ConstraintLayout可以实现可视化的拖动来操作，我使用后某些时候拖动也不能完全准确，所以我认为可以采用拖动加xml方式来布局。 
    本...]]></description><category></category></item><item><title><![CDATA[app安装报错FileUriExposedException]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/79882503</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/79882503</guid><author>lylodyf</author><pubDate>Tue, 10 Apr 2018 15:54:03 +0800</pubDate><description><![CDATA[原因

从Android 7.0开始，不再允许在app中把file:// Uri暴露给其他app，否则应用会抛出FileUriExposedException。原因在于，Google认为使用file:// Uri存在一定的风险。比如，文件是私有的，其他app无法访问该文件，或者其他app没有申请READ_EXTERNAL_STORAGE运行时权限。解决方案是，使用FileProvider生成con...]]></description><category></category></item><item><title><![CDATA[给初学者的RxJava2.0教程(四)]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/79128426</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/79128426</guid><author>lylodyf</author><pubDate>Mon, 22 Jan 2018 14:08:45 +0800</pubDate><description><![CDATA[前言

在上一节中, 我们提到了Flowable 和Backpressure背压, 本来这一节的确是想讲这两个东西的，可是写到一半感觉还是差点火候，感觉时机未到， 因此，这里先来做个准备工作， 先带大家学习zip这个操作符, 这个操作符也是比较牛逼的东西了， 涉及到的东西也比较多， 主要是一些细节上的东西太多， 通过学习这个操作符，可以为我们下一节的Backpressure 做个铺垫.



正题]]></description><category></category></item><item><title><![CDATA[Retrofit2完全教程]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/79128403</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/79128403</guid><author>lylodyf</author><pubDate>Mon, 22 Jan 2018 14:06:55 +0800</pubDate><description><![CDATA[转载地址



本文注目录：


Retrofit入门  
Retrofit注解详解
Gson与Converter
RxJava与CallAdapter
自定义Converter
自定义CallAdapter
其它说明




前言

接口列表：




  地址
  请求方法
  参数
  说明



  /blog
  GET
  page={page},sort=asc或desc
  分页获]]></description><category></category></item><item><title><![CDATA[给初学者的RxJava2.0教程(三)]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/78866116</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/78866116</guid><author>lylodyf</author><pubDate>Thu, 21 Dec 2017 17:44:10 +0800</pubDate><description><![CDATA[前言上一节讲解了线程调度, 并且举了两个实际中的例子, 其中有一个登录的例子, 不知大家有没有想过这么一个问题, 如果是一个新用户, 必须先注册, 等注册成功之后再自动登录该怎么做呢.很明显, 这是一个嵌套的网络请求, 首先需要去请求注册, 待注册成功回调了再去请求登录的接口.我们当然可以想当然的写成这样:    private void login() {
        api.login(ne]]></description><category></category></item><item><title><![CDATA[给初学者的RxJava2.0教程(二)]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/78866022</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/78866022</guid><author>lylodyf</author><pubDate>Thu, 21 Dec 2017 17:37:08 +0800</pubDate><description><![CDATA[前言上一节教程讲解了最基本的RxJava2的使用, 在本节中, 我们将学习RxJava强大的线程控制.正题还是以之前的例子, 两根水管: 
正常情况下, 上游和下游是工作在同一个线程中的, 也就是说上游在哪个线程发事件, 下游就在哪个线程接收事件.怎么去理解呢, 以Android为例, 一个Activity的所有动作默认都是在主线程中运行的, 比如我们在onCreate中打出当前线程的名字:]]></description><category></category></item><item><title><![CDATA[给初学者的RxJava2.0教程(一)]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/78865987</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/78865987</guid><author>lylodyf</author><pubDate>Thu, 21 Dec 2017 17:35:49 +0800</pubDate><description><![CDATA[前言上个月RxJava2正式版发布了，但目前国内的资料还比较少，以前使用过RxJava1只需要看看更新文档就知道怎么使用了，但还有一些以前没用过RxJava的朋友可能就不知道怎么办了，不知道该看RxJava1还是直接跳到RxJava2。所以写下这个教程， 帮助那些没有用过RxJava的朋友入门。
  注：如果你觉得写得不好，请直接批评指出。 
  我先回答这个问题：学习RxJava2需要先学习RxJ]]></description><category></category></item><item><title><![CDATA[Canvas详解]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/78853238</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/78853238</guid><author>lylodyf</author><pubDate>Wed, 20 Dec 2017 14:55:02 +0800</pubDate><description><![CDATA[根据文档说明我们知道想要draw something有四个基本的要素： 
- 一个保存像素的Bitmap 
- 一个Canvas进行Bitmap的绘制 
- 绘制的东西 
- 画笔Paint获取Canvas获取Canvas实例我们一般都使用两种方式，一种是重写View的onDraw方法获得Canvas，另一种就是自己创建一个Canvas对象，创建Canvas对象我们需要一个Bitmap对象 Bitm]]></description><category></category></item><item><title><![CDATA[面向对象的六大设计原则]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/73239676</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/73239676</guid><author>lylodyf</author><pubDate>Thu, 22 Jun 2017 15:21:21 +0800</pubDate><description><![CDATA[单一职责原则单一职责原则的英文名称是Single Responsibility Principle，缩写是SRP。SRP定义是：就一个类而言，应该仅有一个引起它变化的原因。简单来说就是，一个类中应该是一组相关性很高的函数、数据的封装。。。]]></description><category></category></item><item><title><![CDATA[MaterialDesign之SearchView全面解锁]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/72627991</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/72627991</guid><author>lylodyf</author><pubDate>Fri, 16 Jun 2017 09:39:13 +0800</pubDate><description><![CDATA[一、简述

SearchView是v7包中的一个兼容性控件，它可以单独使用，也可以配合menu+toolbar一起使用。本文将使用第二种方式，对SearchView进行探索。最后将通过代码实战，实现 “仿网易云音乐本地音乐搜索” 效果，带你全面解锁SearchView的UI定制及查询功能的实现。



二、常规使用

*本文重点是SearchView，所以对Toolbar的使用及注意事项在本文中将...]]></description><category></category></item><item><title><![CDATA[Github远程仓库的操作同步]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/65630742</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/65630742</guid><author>lylodyf</author><pubDate>Wed, 24 May 2017 09:06:59 +0800</pubDate><description><![CDATA[把本地项目上传到Github

这里的操作前提是按照之前博客把环境SSH都配置好了的。 
1. 首先在Github创建存放本地项目的仓库 
怎么创建仓库大家肯定已经知道了，之前博客也有提过。 
 
2.]]></description><category></category></item><item><title><![CDATA[Android Shader渲染以及实现水波纹霓虹文字雷达等效果]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/70053205</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/70053205</guid><author>lylodyf</author><pubDate>Mon, 22 May 2017 09:08:35 +0800</pubDate><description><![CDATA[Shader概述

Shader是绘图过程中的着色器，实现绘制各种不同的效果，Shader有以下五个子类： 
- BitmapShader用于Bitmap图片的渲染 
- ComposeShader用于混合渲染 
- LinearGradient用于线性渲染 
- RadialGradient用于环形渲染 
- SweepGradient用于梯度渲染  



Shader的三种模式TileMod]]></description><category></category></item><item><title><![CDATA[Android 焦点Focus问题的总结]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/72367917</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/72367917</guid><author>lylodyf</author><pubDate>Wed, 17 May 2017 15:23:08 +0800</pubDate><description><![CDATA[clickable=”true”所有的获取焦点，都要有一个前提，那就是该控件必须设置android:clickable=”true”。focusable和focusableInTouchMode的区别
focusable 
针对在键盘下操作的情况，比如非触屏手机或者TV，如果设置为true，则键盘上下左右选中，焦点会随之移动。
focusableInTouchMode 
显然是针对触屏情况下的，也就]]></description><category></category></item><item><title><![CDATA[Android Socket通信详解及聊天程序示例]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/54668082</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/54668082</guid><author>lylodyf</author><pubDate>Thu, 06 Apr 2017 09:02:34 +0800</pubDate><description><![CDATA[网络编程的一些介绍
目前较为流行的网络编程模型是客户机/服务器（C/S）结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提 出申请。服务器一般作为守护进程始终运行，监听网络端口，一旦有客户请求，就会启动一个服务进程来响应该客户，同时自己继续监听服务端口，使后来的客户也
 能及时得到服务。
 
TCP是Tranfer Control Protocol的 简]]></description><category></category></item><item><title><![CDATA[Android应用开发性能优化完全分析]]></title><link>https://blog.youkuaiyun.com/lylodyf/article/details/68941545</link><guid>https://blog.youkuaiyun.com/lylodyf/article/details/68941545</guid><author>lylodyf</author><pubDate>Sat, 01 Apr 2017 10:51:53 +0800</pubDate><description><![CDATA[转载自：http://blog.youkuaiyun.com/yanbober/article/details/48394201#t271.  背景其实有点不想写这篇文章的，但是又想写，有些矛盾。不想写的原因是随便上网一搜一堆关于性能的建议，感觉大家你一总结、我一总结的都说到了很多优化注意事项，但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用，啥啥啥该咋用等，却很少有较为系统的进行真正性能案例分析的，]]></description><category></category></item></channel></rss>