<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ckwccc的博客]]></title><description><![CDATA[成长的海绵]]></description><link>https://blog.youkuaiyun.com/ckwccc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ckwccc]]></copyright><item><title><![CDATA[Rxjava2源码学习（二）]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/81164253</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/81164253</guid><author>ckwccc</author><pubDate>Wed, 15 Aug 2018 15:22:07 +0800</pubDate><description><![CDATA[上一篇中看了Rxjava的通过链式调用来实现数据的传输，这一篇接着看加上线程切换之后，整个流程是怎样的。

还是以下面这个流程为例：



Observable.create(new ObservableOnSubscribe&amp;amp;amp;lt;String&amp;amp;amp;gt;() {
            @Override
            public void subscribe(ObservableEm...]]></description><category></category></item><item><title><![CDATA[Rxjava2源码学习（一）]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/81066691</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/81066691</guid><author>ckwccc</author><pubDate>Wed, 15 Aug 2018 15:21:57 +0800</pubDate><description><![CDATA[这一篇主要看一下Rxjava的链式调用（Builder设计模式） 和 数据如何实现传输。

首先看一下下面这个简单的代码片段：



Observable.create(new ObservableOnSubscribe&amp;amp;amp;amp;lt;String&amp;amp;amp;amp;gt;() {
       @Override
       public void subscribe(ObservableEmitter&amp;amp;amp;amp;lt;Stri...]]></description><category></category></item><item><title><![CDATA[一步步实现自定义View之饼状图]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80914017</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80914017</guid><author>ckwccc</author><pubDate>Wed, 04 Jul 2018 15:52:16 +0800</pubDate><description><![CDATA[首先看一下效果图： 


对于这个饼状图，我也没有说一开始就想好要做成什么样，只是单纯地想做一个。绘制圆弧部分很简单。但是只是画出几个圆弧肯定是不够的。于是我就又在外面加了一些文字。文字有了，我又想为何不在一开始的时候给它加个动画呢？于是就有了这个组合的动画。动画有了，我又想不如再加个点击事件吧。这样一个简单的饼状图就完成了。



1.前期准备

观察上面的gif图，我用了三个画笔（扇形，文字，...]]></description><category></category></item><item><title><![CDATA[一步步实现自定义View之雷达图]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80832825</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80832825</guid><author>ckwccc</author><pubDate>Wed, 27 Jun 2018 17:45:09 +0800</pubDate><description><![CDATA[之前在项目中需要用到雷达图，我就在github上挑了一个用于项目中实现了需求。但是作为一只有追求的程序猿，我还是想自己实现一下，忙里偷闲地实现了一个雷达图。下面看一下效果图吧：



接着详细地介绍一下我的实现思路吧

1.绘制背景图

首先这里需要注意的一点是，我需要将这个背景绘制在整个View的中间（从Gif图中可以看出），我需要先将整个画布平移 
translateX = ( 整个View的...]]></description><category></category></item><item><title><![CDATA[一步步实现自定义View之流式布局]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80782174</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80782174</guid><author>ckwccc</author><pubDate>Sat, 23 Jun 2018 11:32:19 +0800</pubDate><description><![CDATA[首先看一下效果图吧： 


1.实现原理

分为两个部分，容器：继承自ViewGroup的TagViewLayout，单个item：继承自VIew的TagView。 
下面先看一下TagView 
1.1 TagView 比较简单，主要就是绘制一个矩形（可以带有圆角），中间有文字。在onMeasure方法中做好测量即可。

1.2 TagViewLayout  
需要重写generateLayou...]]></description><category></category></item><item><title><![CDATA[一步步实现自定义View之圆形进度条]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80774948</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80774948</guid><author>ckwccc</author><pubDate>Fri, 22 Jun 2018 15:58:22 +0800</pubDate><description><![CDATA[目前基于Kotlin做了三种圆形进度条，首先看一下这三种进度条的效果图吧（项目地址戳这里）： 
 
第一个自定义View，我把它取名为CircleLevelView，效果看着是一段圆弧的动画显示进度。第二个取名为CircleVerticalView，利用二阶贝塞尔曲线实现波浪动画，并在竖直方向上有上升动画。第三个是CirclePointView， 
在一个圆的边上画出一百个小圆，对应进度显示不同的...]]></description><category></category></item><item><title><![CDATA[一步步实现自定义View之播放暂停控件]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80761974</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80761974</guid><author>ckwccc</author><pubDate>Thu, 21 Jun 2018 16:04:36 +0800</pubDate><description><![CDATA[最近开始深入学习自定义View，通过模仿学习，再配合Kotlin，写了一些自定义控件，这次介绍的是类似于音乐播放暂停的一个控件

首先看一下效果图： 


下面先分析一下原理：



状态1是播放状态，有两个小矩形，外面是一个圆，它需要最终变换成状态3的暂停状态 
状态2是两个小矩形变成如图的黑色三角的一个过程 
我们可以通过动画来实现它，两个小矩形分别变成三角形的一半 
同时再给画布一个90度的...]]></description><category></category></item><item><title><![CDATA[关于CNUO的一点点]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80586586</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80586586</guid><author>ckwccc</author><pubDate>Tue, 05 Jun 2018 20:17:49 +0800</pubDate><description><![CDATA[CNUO名字的由来？ 
因为自己曾经的QQ名就是C诺，当初的中二少年，思来想去就把这款App叫做CNUO了。

最初的设计图是通过墨刀设计的，不过写到现在，成型的模样也已经和当初设计的有了很大的区别。虽然这是不成熟的表现，但是自己也通过从想法的产生到付之行动，遇到困难默默解决，一步一步走了下来。这一版前后断断续续写了三个多月，中间一度“忘了”写，好在是坚持了下来。对于大牛来说，可能这个App很简单...]]></description><category></category></item><item><title><![CDATA[基于MediaSessionCompat的音乐播放器 —— CNUO]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80569771</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80569771</guid><author>ckwccc</author><pubDate>Mon, 04 Jun 2018 17:00:10 +0800</pubDate><description><![CDATA[陆陆续续终于写完了这一款属于我自己的音乐播放器——CNUO音乐播放器。

简介 
这是一款基于MediaSessionCompat打造的本地音乐播放器，主体架构参考了googlesamples的android-UniversalMusicPlayer以及一些优秀的Android开源音乐播放器。

系列文章： 
打造基于MediaSessionCompat的音乐播放（一） 
打造基于MediaSes...]]></description><category></category></item><item><title><![CDATA[打造基于MediaSessionCompat的音乐播放（二）]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80568188</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80568188</guid><author>ckwccc</author><pubDate>Mon, 04 Jun 2018 15:40:31 +0800</pubDate><description><![CDATA[前言 
在上一篇文章打造基于MediaSessionCompat的音乐播放（一）中，已经简单地介绍了MediaSessionCompat框架以及它的具体使用。 
今天这篇，主要介绍如何提供数据给播放器。 
在这里我还是以谷歌官方的android-UniversalMusicPlayer为例，并结合我的实际（提供的是本地数据），如果你想看网络数据如何处理，可以参考上面谷歌的Demo。

下面进入正题...]]></description><category></category></item><item><title><![CDATA[Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80527265</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80527265</guid><author>ckwccc</author><pubDate>Thu, 31 May 2018 17:10:04 +0800</pubDate><description><![CDATA[刚才遇到一个Bug，是使用Kotlin时产生的，先看一下报错信息：



 Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method 
kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter ...]]></description><category></category></item><item><title><![CDATA[打造基于MediaSessionCompat的音乐播放（一）]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/80363674</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/80363674</guid><author>ckwccc</author><pubDate>Fri, 18 May 2018 14:11:30 +0800</pubDate><description><![CDATA[前言：

依稀记得很久之前写过音乐播放的Demo，当时用的方式还是：通过广播实现Activity和Service之间的通信，通过间接控制MediaPlayer来实现音乐的播放。

最近写了一个本地音乐播放器，总体架构是模仿 谷歌官方的android-UniversalMusicPlayer，这里先不多做介绍。这篇的重点是简单地介绍一下其中使用的MediaSessionCompat框架的使用。

M...]]></description><category></category></item><item><title><![CDATA[Activity界面跳转出现闪屏问题]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79923209</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79923209</guid><author>ckwccc</author><pubDate>Fri, 13 Apr 2018 09:13:51 +0800</pubDate><description><![CDATA[使用共享元素，界面切换的时候，出现了闪屏现象，跳转的时候，可以明显地看到界面闪白屏，很影响视觉效果。原本的代码是这样的：在v21-style.xml中，目标Activity的style是这样的：<style name="AlbumTheme" parent="MaterialTheme.Base">
    <item name="android:windowDrawsSystemBarBackgr]]></description><category></category></item><item><title><![CDATA[cannot resolve symbol theme或者android.view.InflateException]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79919326</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79919326</guid><author>ckwccc</author><pubDate>Thu, 12 Apr 2018 20:10:05 +0800</pubDate><description><![CDATA[1.今天在style.xml中突然出现了类似于Theme.AppCompat.Light.DarkActionBar，Theme飘红的情况。2.或者出现类似于下面这种NavigationMenuItemView,FloatingActionButton等本来不应该报错的问题android.view.InflateException: Binary XML file line #17: Binary]]></description><category></category></item><item><title><![CDATA[错误 java.lang.NoSuchMethodError: No static method getFont]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79868832</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79868832</guid><author>ckwccc</author><pubDate>Mon, 09 Apr 2018 16:42:40 +0800</pubDate><description><![CDATA[java.lang.NoSuchMethodError: No static method getFont 
at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119) 
at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndSt]]></description><category></category></item><item><title><![CDATA[内存泄漏之EventBus]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79867604</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79867604</guid><author>ckwccc</author><pubDate>Mon, 09 Apr 2018 15:46:14 +0800</pubDate><description><![CDATA[项目中使用了EventBus之后，不停地出现报告关于EventBus内存泄漏的Leaks 
反复检查了代码，发现EventBus的注册已经解绑都是正确的，一开始也觉得这个内存泄漏地莫名其妙。 
泄漏大概说的是，EventBus持有了某个Activity或者Fragment的对象，这个对象泄漏了。后面我梳理了一下场景： 
导航页过去之后，进入多个Fragment切换的主界面（EventBus有注册在这]]></description><category></category></item><item><title><![CDATA[将项目从Eclipse转到Android Studio]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79742879</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79742879</guid><author>ckwccc</author><pubDate>Thu, 29 Mar 2018 15:01:07 +0800</pubDate><description><![CDATA[从Eclipse迁移： 
1.从svn上拉取项目：File -&amp;gt; new -&amp;gt; other -&amp;gt; SVN -&amp;gt;从SVN检出项目… 
    如果报 refused by server问题，关掉代理，重启电脑，打开浏览器能上网就好了 
    如果有缺少的文件资源，添加进去

2.点击主工程，对它右键选择Export并选择Android下的Generate Gradle Bu...]]></description><category></category></item><item><title><![CDATA[自定义转盘]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79497212</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79497212</guid><author>ckwccc</author><pubDate>Fri, 09 Mar 2018 14:37:11 +0800</pubDate><description><![CDATA[开年第一篇，写了一个自定义的转盘，目前有两种模式，具体的效果如下： 
模式一：指针模式 
当转盘转动停下下后，可以获取到当前处于初始位置的数据如下图所示就是初始状态，0所在的就是初始位置（在坐标系中，就是Y轴的上半轴），这里以这张图来具体分析，每个item所占比例为 60度，所以这个初始区域的范围就是【-30,30】，如果全部转成正数，可以理解成从圆的330度-30度。这个模式下，显示的是当前包含Y]]></description><category></category></item><item><title><![CDATA[Android Tools Attributes使用]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79298135</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79298135</guid><author>ckwccc</author><pubDate>Fri, 09 Feb 2018 14:27:06 +0800</pubDate><description><![CDATA[前言：

在xml的根布局中你一定见过这样的代码：



xmlns:tools=&quot;http://schemas.android.com/tools&quot;

一直以来都不知道这是什么，或者这些代码有什么用，偶然间看到一个GitHub上介绍tools使用的小项目，终于明白了它的作用。下面一起来感受一下吧。

Android Studio支持预览效果，但是有些效果必须是运行了代码之后才能看到，比如我们有个...]]></description><category></category></item><item><title><![CDATA[Android Material Design之TextInputLayout]]></title><link>https://blog.youkuaiyun.com/ckwccc/article/details/79292081</link><guid>https://blog.youkuaiyun.com/ckwccc/article/details/79292081</guid><author>ckwccc</author><pubDate>Thu, 08 Feb 2018 17:34:09 +0800</pubDate><description><![CDATA[1.TextInputLayout是什么？首先看一下Google注释原文：Layout which wraps an {@link android.widget.EditText} (or descendant) to show a floating label when the hint is hidden due to the user inputting text.这是一个包装了当用户在输入文]]></description><category></category></item></channel></rss>