自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ckwccc的博客

成长的海绵

  • 博客(70)
  • 收藏
  • 关注

原创 Rxjava2源码学习(二)

上一篇中看了Rxjava的通过链式调用来实现数据的传输,这一篇接着看加上线程切换之后,整个流程是怎样的。还是以下面这个流程为例:Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEm...

2018-08-15 15:22:07 300

原创 Rxjava2源码学习(一)

这一篇主要看一下Rxjava的链式调用(Builder设计模式) 和 数据如何实现传输。首先看一下下面这个简单的代码片段:Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<Stri...

2018-08-15 15:21:57 338

原创 一步步实现自定义View之饼状图

首先看一下效果图: 对于这个饼状图,我也没有说一开始就想好要做成什么样,只是单纯地想做一个。绘制圆弧部分很简单。但是只是画出几个圆弧肯定是不够的。于是我就又在外面加了一些文字。文字有了,我又想为何不在一开始的时候给它加个动画呢?于是就有了这个组合的动画。动画有了,我又想不如再加个点击事件吧。这样一个简单的饼状图就完成了。1.前期准备观察上面的gif图,我用了三个画笔(扇形,文字,...

2018-07-04 15:52:16 598

原创 一步步实现自定义View之雷达图

之前在项目中需要用到雷达图,我就在github上挑了一个用于项目中实现了需求。但是作为一只有追求的程序猿,我还是想自己实现一下,忙里偷闲地实现了一个雷达图。下面看一下效果图吧:接着详细地介绍一下我的实现思路吧1.绘制背景图首先这里需要注意的一点是,我需要将这个背景绘制在整个View的中间(从Gif图中可以看出),我需要先将整个画布平移 translateX = ( 整个View的...

2018-06-27 17:45:09 915 4

原创 一步步实现自定义View之流式布局

首先看一下效果图吧: 1.实现原理分为两个部分,容器:继承自ViewGroup的TagViewLayout,单个item:继承自VIew的TagView。 下面先看一下TagView 1.1 TagView 比较简单,主要就是绘制一个矩形(可以带有圆角),中间有文字。在onMeasure方法中做好测量即可。1.2 TagViewLayout 需要重写generateLayou...

2018-06-23 11:32:19 1052

原创 一步步实现自定义View之圆形进度条

目前基于Kotlin做了三种圆形进度条,首先看一下这三种进度条的效果图吧(项目地址戳这里): 第一个自定义View,我把它取名为CircleLevelView,效果看着是一段圆弧的动画显示进度。第二个取名为CircleVerticalView,利用二阶贝塞尔曲线实现波浪动画,并在竖直方向上有上升动画。第三个是CirclePointView, 在一个圆的边上画出一百个小圆,对应进度显示不同的...

2018-06-22 15:58:22 1257

原创 一步步实现自定义View之播放暂停控件

最近开始深入学习自定义View,通过模仿学习,再配合Kotlin,写了一些自定义控件,这次介绍的是类似于音乐播放暂停的一个控件首先看一下效果图: 下面先分析一下原理:状态1是播放状态,有两个小矩形,外面是一个圆,它需要最终变换成状态3的暂停状态 状态2是两个小矩形变成如图的黑色三角的一个过程 我们可以通过动画来实现它,两个小矩形分别变成三角形的一半 同时再给画布一个90度的...

2018-06-21 16:04:36 569

原创 关于CNUO的一点点

CNUO名字的由来? 因为自己曾经的QQ名就是C诺,当初的中二少年,思来想去就把这款App叫做CNUO了。最初的设计图是通过墨刀设计的,不过写到现在,成型的模样也已经和当初设计的有了很大的区别。虽然这是不成熟的表现,但是自己也通过从想法的产生到付之行动,遇到困难默默解决,一步一步走了下来。这一版前后断断续续写了三个多月,中间一度“忘了”写,好在是坚持了下来。对于大牛来说,可能这个App很简单...

2018-06-05 20:17:49 2700 1

原创 基于MediaSessionCompat的音乐播放器 —— CNUO

陆陆续续终于写完了这一款属于我自己的音乐播放器——CNUO音乐播放器。简介 这是一款基于MediaSessionCompat打造的本地音乐播放器,主体架构参考了googlesamples的android-UniversalMusicPlayer以及一些优秀的Android开源音乐播放器。系列文章: 打造基于MediaSessionCompat的音乐播放(一) 打造基于MediaSes...

2018-06-04 17:00:10 3133 1

原创 打造基于MediaSessionCompat的音乐播放(二)

前言 在上一篇文章打造基于MediaSessionCompat的音乐播放(一)中,已经简单地介绍了MediaSessionCompat框架以及它的具体使用。 今天这篇,主要介绍如何提供数据给播放器。 在这里我还是以谷歌官方的android-UniversalMusicPlayer为例,并结合我的实际(提供的是本地数据),如果你想看网络数据如何处理,可以参考上面谷歌的Demo。下面进入正题...

2018-06-04 15:40:31 4121

原创 Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null

刚才遇到一个Bug,是使用Kotlin时产生的,先看一下报错信息: Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter ...

2018-05-31 17:10:04 15475

原创 打造基于MediaSessionCompat的音乐播放(一)

前言:依稀记得很久之前写过音乐播放的Demo,当时用的方式还是:通过广播实现Activity和Service之间的通信,通过间接控制MediaPlayer来实现音乐的播放。最近写了一个本地音乐播放器,总体架构是模仿 谷歌官方的android-UniversalMusicPlayer,这里先不多做介绍。这篇的重点是简单地介绍一下其中使用的MediaSessionCompat框架的使用。M...

2018-05-18 14:11:30 10799 4

原创 Activity界面跳转出现闪屏问题

使用共享元素,界面切换的时候,出现了闪屏现象,跳转的时候,可以明显地看到界面闪白屏,很影响视觉效果。原本的代码是这样的:在v21-style.xml中,目标Activity的style是这样的:<style name="AlbumTheme" parent="MaterialTheme.Base"> <item name="android:windowDrawsSystemBarBackgr

2018-04-13 09:13:51 5514

原创 cannot resolve symbol theme或者android.view.InflateException

1.今天在style.xml中突然出现了类似于Theme.AppCompat.Light.DarkActionBar,Theme飘红的情况。2.或者出现类似于下面这种NavigationMenuItemView,FloatingActionButton等本来不应该报错的问题android.view.InflateException: Binary XML file line #17: Binary

2018-04-12 20:10:05 2686

原创 错误 java.lang.NoSuchMethodError: No static method getFont

java.lang.NoSuchMethodError: No static method getFont at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119) at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndSt

2018-04-09 16:42:40 8554 2

原创 内存泄漏之EventBus

项目中使用了EventBus之后,不停地出现报告关于EventBus内存泄漏的Leaks 反复检查了代码,发现EventBus的注册已经解绑都是正确的,一开始也觉得这个内存泄漏地莫名其妙。 泄漏大概说的是,EventBus持有了某个Activity或者Fragment的对象,这个对象泄漏了。后面我梳理了一下场景: 导航页过去之后,进入多个Fragment切换的主界面(EventBus有注册在这

2018-04-09 15:46:14 5134

原创 将项目从Eclipse转到Android Studio

从Eclipse迁移: 1.从svn上拉取项目:File -&gt; new -&gt; other -&gt; SVN -&gt;从SVN检出项目… 如果报 refused by server问题,关掉代理,重启电脑,打开浏览器能上网就好了 如果有缺少的文件资源,添加进去2.点击主工程,对它右键选择Export并选择Android下的Generate Gradle Bu...

2018-03-29 15:01:07 451

原创 自定义转盘

开年第一篇,写了一个自定义的转盘,目前有两种模式,具体的效果如下: 模式一:指针模式 当转盘转动停下下后,可以获取到当前处于初始位置的数据如下图所示就是初始状态,0所在的就是初始位置(在坐标系中,就是Y轴的上半轴),这里以这张图来具体分析,每个item所占比例为 60度,所以这个初始区域的范围就是【-30,30】,如果全部转成正数,可以理解成从圆的330度-30度。这个模式下,显示的是当前包含Y

2018-03-09 14:37:11 13898

原创 Android Tools Attributes使用

前言:在xml的根布局中你一定见过这样的代码:xmlns:tools="http://schemas.android.com/tools"一直以来都不知道这是什么,或者这些代码有什么用,偶然间看到一个GitHub上介绍tools使用的小项目,终于明白了它的作用。下面一起来感受一下吧。Android Studio支持预览效果,但是有些效果必须是运行了代码之后才能看到,比如我们有个...

2018-02-09 14:27:06 1005

原创 Android Material Design之TextInputLayout

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.这是一个包装了当用户在输入文

2018-02-08 17:34:09 622

原创 adb server version not match client

已经出现过几次了,出现这种情况的问题一般是adb 端口被占用了。通常情况下是因为某种手机助手打开了,占用了端口号 。 目前发现过两种手机助手:1. 360手机助手: 我明明没有去开过这个助手,它自己就打开了,只要把它卸载了就好了。具体可以看这一篇文章: http://blog.csdn.net/rodulf/article/details/519399742. 91助手: 一般它启

2018-02-06 10:00:47 763

原创 RxJava2深度学习(三)

这一篇主要学习一下zip操作符。 先了解一下zip操作符是什么,能做什么: Zip通过一个函数将多个Observable发送的事件结合到一起,然后发送这些组合到一起的事件。它按照严格的顺序应用这个函数。它只发射与发射数据项最少的那个Observable一样多的数据。 举个例子: 上游有两根水管(Observable),其中一个发送事件 A B C,另外一个发送事件 1 2 3 4,zip操作

2018-02-05 16:40:48 620

原创 RxJava2深度学习(二)

上一篇学完了Observable和Observer,这一篇学一下map操作符和flatMap操作符1.先看一下map操作符: map是RxJava中最简单的一个变换操作符了,map操作符的作用是将上游(Observable)发送的每一个事件,转换成一个函数,使得每一个上游发送的事件都按照指定的规则去做。下面先看一个例子: Observable.create(new ObservableOnSub

2018-02-05 15:58:36 671

原创 RxJava2深度学习(一)

虽然一直都有在用RxJava2,但是很惭愧的是,一直都只是在和Retrofit配合使用的时候用了一下,总感觉自己确实还不怎么理解RxJava2。看着RxJava中各种各样的操作符,有点力不从心的感觉。可耻地连代码都看不懂的话,实在说不过去哈。 下面进入正题 使用RxJava2,需要先配置build.gradle: 这是目前最新的版本compile 'io.reactivex.rxja

2018-02-02 16:52:04 889

原创 关于android:descendantFocusability

最近修改一个功能,EditText一开始默认不获焦点,等点击Edittext的时候,再获得焦点并弹软键盘。 按照常规操作, 一开始在代码中设置Edittext没有焦点:tv_subject.clearFocus();当它需要焦点的时候,让其获取焦点: tv_subject.setFocusable(true); tv_subject.setFocusableInTouchMode(true);

2018-02-01 11:12:04 1484

原创 系统通话界面 自定义来电显示

上一篇文章写了使用WindowManager实现从自己的app界面拨打电话调用系统通话展示自定义布局。这一篇文章主要介绍一下使用BroadcastReceiver、Service配合WindowManager实现当有电话打进来时,搜索该号码是否是自己app内的用户(好友),显示特定的信息。既然使用了BroadcastReceiver和Service,首先先介绍一下BroadcastReceiver和

2018-01-31 14:40:43 6657 4

原创 Android 系统拨号界面实现自定义悬浮布局

首先看一下效果图: 1.首先提示是否需要开始个性化拨号界面2.如果需要,跳转进入设置界面:3.进入拨打电话界面:中间的就是自定义显示出来的界面实现过程: 1.布局:<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.and

2018-01-26 16:10:16 6171 5

原创 基于IjkPlayer的视频播放器

最近在GitHub上看到一款基于IjkPlayer的视频播放控件,觉得不错,所以就体验了一下。它的功能挺强大的,主要有一下几点: 支持 边播边缓存,使用了AndroidVideoCache。 支持 其他协议和编码concat、rtsp、hls、rtmp、crypto、mpeg等。 支持 DEMO演示获取视频第一帧等实现。 支持 简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊

2018-01-24 16:26:09 1589

原创 关于EditText的一些小事

EditText的使用场景有很多,例如用户登录的时候,输入信息的时候。所以我觉得有必要写篇文章记录一下。1.inputType:EditText的输入类型 android:inputType="text" android:inputType="textCapCharacters" 字母大写 android:inputType="textCapWords" 首字母大

2018-01-24 15:46:32 874

原创 Android ijkplayer的初体验

ijkplayer是b站开源的的视频播放器。想要使用它的原因是之前在github上看到bilibili开源的弹幕框架,下载体验了一下,感觉很有趣,想着结合两者使用一下。下面先看一下怎么使用ijkplayer吧!1.引入:dependencies { # required, enough for most devices. compile 'tv.danmaku.ijk.media:i

2018-01-22 17:04:39 731

原创 Android 自定义ViewPager酷炫切换动画

首先看一下ViewPager自带的滑动效果:那么如何打造属于自己的切换效果呢? 当viewpager上一个可见或依附的页面发生了滚动事件就会调用PageTransformer,这让应用可以使用自定义transformation让viewpager某一个页面视图上实现某些特定的动画属性。只需要一行代码就可以实现自定义动画切换功能, 类似于下面的代码:mPager.setPageTransforme

2018-01-19 14:27:10 934

原创 Android PictureInPicture(画中画功能)

Android 8.0推出了PictureInPicture(画中画功能),目前只有在8.0以上的系统上支持。对比IOS,IOS的Picture in Picture 模式是苹果公司在 iOS 9 中加入的一项多任务功能。下面先看一下效果: 相信不少人在平时使用ios手机的app时,已经体验过了,很高兴谷歌也推出了这项功能。使用画中画模式注意点:1.要使用画中画模式的Activity需要在清单文件

2018-01-18 17:19:19 7194

原创 制作属于你自己的Library

平时在项目中build.gradle中一直用的都是别人的第三方Library,那么如何快速打造属于自己的Library呢?当我们在项目中使用了自己的Library时,感觉应该会很不一样吧! 接下来就介绍一下怎么打造属于自己的Library吧!1.准备好Library 在github上观察其他人的Library,都是有一个app模块用于简单地使用Library。所以我们可以新建一个Project,

2018-01-17 17:23:52 818

原创 Android MVVM框架

一首凉凉送给自己,心累。 首先借鉴一下别人写的关于MVP的优缺点。。。一、MVP模式优缺点在说MVVM之前,简单回顾一下MVP分层,MVP总共分成三层:a 、View: 视图层,对应xml文件与Activity/Fragment; b 、Presenter: 逻辑控制层,同时持有View和Model对象; c 、Model: 实体层,负责获取实体数据。MVP模式有其很大的优点1.解耦合,业务逻

2018-01-16 11:31:12 7245 3

原创 我的Kotlin学习之旅(七)

1.泛型: Kotlin中也有泛型,和Java类似 例如: class Person <T>(name: T){ var personName = name}这个类的主构造函数,初始化时需要指定泛型, 下面是测试:val person = Person<String>("ckw")在这里我们指定了主构造函数中的参数的类型是String,person.personName这里的值就是”

2018-01-12 16:35:33 454

原创 自定义RefreshLayoutView与嵌套的RecyclerView的滑动冲突

1.问题描述: 首先看一下: 2代表的是RecyclerView,1代表的是其他的布局。 问题场景是这样的:外层是一个自定义的可下拉刷新的控件,它的内部嵌套一个RecyclerView(Recycleview上方还有一个布局) 出现的问题是:当RecyclerView可以上下滑动,当下拉到顶部的时候(把这里记为特殊状态),再下拉不触发RefreshLayoutView(外层)的刷新监听,

2018-01-11 15:34:38 2300

原创 PhotoView的使用

1.介绍以及引入PhotoView 是一款扩展自Android ImageView,支持通过单点/多点触摸来进行图片缩放的智能控件。特性:支持单点/多点触摸,即时缩放图片; 支持平滑滚动; 在滑动父控件下能够运行良好;(例如:ViewPager) 当用户的触点改变是可以触发通知在build.gradle的dependencies中加入:compile 'com.github.chrisbane

2018-01-10 16:14:09 817

原创 导入别人的Android Studio项目

导入别人的AS项目时,往往由于个人的配置不同,导入项目可能会变得很慢,这时候可以通过删除和修改一些文件,来实现快速导入项目。首先看一下下面的图:这是一个从github上down下来的的项目,一般地,我们需要删除圈住的.idea文件夹 gradle文件夹 ,还有这里没有显示的build文件夹和.gradle文件夹,接着修改build.gradle中修改成自己本地的版本,可以随便打开一个自己本地的项目查

2018-01-10 10:04:59 2319 1

原创 EventBus 3.0 体验

EventBus是用于Android和Java的发布/订阅事件总线原理:发布者发布事件,订阅者通过EventBus接收事件,做出相应的响应。EventBus的优点有: 1.简化组件间的通信 2.使代码更加简洁 3.具有高级特性,如交付线程、订阅者优先级等 4.框架体积小EventBus的具体使用: 1.定义事件实体类 例如:public class NightMessageEvent {

2018-01-08 17:45:17 235

原创 Error:Execution failed for task ':app:processDebugManifest'.

项目中出现的错误:Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple errors, see logs这里的意思其实是我的清单文件中某一个地方有错误,清单文件有时候不会飘红,看不出来那里出了错。这时候可以打开清单文件,点击左下角的Merged Manif

2018-01-05 17:08:58 476

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除