
Android
ckwccc
这个作者很懒,什么都没留下…
展开
-
简单的MVP写法(一)
目前接触过的项目,大部分都是MVP模式,现在使用MVP模式比较习惯。 关于MVP的概念: M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。 个人认为,MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系原创 2017-11-30 19:53:11 · 1915 阅读 · 1 评论 -
制作属于你自己的Library
平时在项目中build.gradle中一直用的都是别人的第三方Library,那么如何快速打造属于自己的Library呢?当我们在项目中使用了自己的Library时,感觉应该会很不一样吧! 接下来就介绍一下怎么打造属于自己的Library吧!1.准备好Library 在github上观察其他人的Library,都是有一个app模块用于简单地使用Library。所以我们可以新建一个Project,原创 2018-01-17 17:23:52 · 897 阅读 · 0 评论 -
EventBus 3.0 体验
EventBus是用于Android和Java的发布/订阅事件总线原理:发布者发布事件,订阅者通过EventBus接收事件,做出相应的响应。EventBus的优点有: 1.简化组件间的通信 2.使代码更加简洁 3.具有高级特性,如交付线程、订阅者优先级等 4.框架体积小EventBus的具体使用: 1.定义事件实体类 例如:public class NightMessageEvent {原创 2018-01-08 17:45:17 · 264 阅读 · 0 评论 -
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 · 6324 阅读 · 5 评论 -
导入别人的Android Studio项目
导入别人的AS项目时,往往由于个人的配置不同,导入项目可能会变得很慢,这时候可以通过删除和修改一些文件,来实现快速导入项目。首先看一下下面的图:这是一个从github上down下来的的项目,一般地,我们需要删除圈住的.idea文件夹 gradle文件夹 ,还有这里没有显示的build文件夹和.gradle文件夹,接着修改build.gradle中修改成自己本地的版本,可以随便打开一个自己本地的项目查原创 2018-01-10 10:04:59 · 2540 阅读 · 1 评论 -
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 · 7528 阅读 · 0 评论 -
RxJava2深度学习(一)
虽然一直都有在用RxJava2,但是很惭愧的是,一直都只是在和Retrofit配合使用的时候用了一下,总感觉自己确实还不怎么理解RxJava2。看着RxJava中各种各样的操作符,有点力不从心的感觉。可耻地连代码都看不懂的话,实在说不过去哈。 下面进入正题 使用RxJava2,需要先配置build.gradle: 这是目前最新的版本compile 'io.reactivex.rxja原创 2018-02-02 16:52:04 · 946 阅读 · 0 评论 -
PhotoView的使用
1.介绍以及引入PhotoView 是一款扩展自Android ImageView,支持通过单点/多点触摸来进行图片缩放的智能控件。特性:支持单点/多点触摸,即时缩放图片; 支持平滑滚动; 在滑动父控件下能够运行良好;(例如:ViewPager) 当用户的触点改变是可以触发通知在build.gradle的dependencies中加入:compile 'com.github.chrisbane原创 2018-01-10 16:14:09 · 896 阅读 · 0 评论 -
Android 自定义ViewPager酷炫切换动画
首先看一下ViewPager自带的滑动效果:那么如何打造属于自己的切换效果呢? 当viewpager上一个可见或依附的页面发生了滚动事件就会调用PageTransformer,这让应用可以使用自定义transformation让viewpager某一个页面视图上实现某些特定的动画属性。只需要一行代码就可以实现自定义动画切换功能, 类似于下面的代码:mPager.setPageTransforme原创 2018-01-19 14:27:10 · 1073 阅读 · 0 评论 -
Android Tools Attributes使用
前言:在xml的根布局中你一定见过这样的代码:xmlns:tools="http://schemas.android.com/tools"一直以来都不知道这是什么,或者这些代码有什么用,偶然间看到一个GitHub上介绍tools使用的小项目,终于明白了它的作用。下面一起来感受一下吧。Android Studio支持预览效果,但是有些效果必须是运行了代码之后才能看到,比如我们有个...原创 2018-02-09 14:27:06 · 1076 阅读 · 0 评论 -
RxJava2深度学习(二)
上一篇学完了Observable和Observer,这一篇学一下map操作符和flatMap操作符1.先看一下map操作符: map是RxJava中最简单的一个变换操作符了,map操作符的作用是将上游(Observable)发送的每一个事件,转换成一个函数,使得每一个上游发送的事件都按照指定的规则去做。下面先看一个例子: Observable.create(new ObservableOnSub原创 2018-02-05 15:58:36 · 705 阅读 · 0 评论 -
RxJava2深度学习(三)
这一篇主要学习一下zip操作符。 先了解一下zip操作符是什么,能做什么: Zip通过一个函数将多个Observable发送的事件结合到一起,然后发送这些组合到一起的事件。它按照严格的顺序应用这个函数。它只发射与发射数据项最少的那个Observable一样多的数据。 举个例子: 上游有两根水管(Observable),其中一个发送事件 A B C,另外一个发送事件 1 2 3 4,zip操作原创 2018-02-05 16:40:48 · 665 阅读 · 0 评论 -
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 · 659 阅读 · 0 评论 -
自定义转盘
开年第一篇,写了一个自定义的转盘,目前有两种模式,具体的效果如下: 模式一:指针模式 当转盘转动停下下后,可以获取到当前处于初始位置的数据如下图所示就是初始状态,0所在的就是初始位置(在坐标系中,就是Y轴的上半轴),这里以这张图来具体分析,每个item所占比例为 60度,所以这个初始区域的范围就是【-30,30】,如果全部转成正数,可以理解成从圆的330度-30度。这个模式下,显示的是当前包含Y原创 2018-03-09 14:37:11 · 14625 阅读 · 0 评论 -
将项目从Eclipse转到Android Studio
从Eclipse迁移: 1.从svn上拉取项目:File -> new -> other -> SVN ->从SVN检出项目… 如果报 refused by server问题,关掉代理,重启电脑,打开浏览器能上网就好了 如果有缺少的文件资源,添加进去2.点击主工程,对它右键选择Export并选择Android下的Generate Gradle Bu...原创 2018-03-29 15:01:07 · 508 阅读 · 0 评论 -
Rxjava2源码学习(一)
这一篇主要看一下Rxjava的链式调用(Builder设计模式) 和 数据如何实现传输。首先看一下下面这个简单的代码片段:Observable.create(new ObservableOnSubscribe&amp;amp;lt;String&amp;amp;gt;() { @Override public void subscribe(ObservableEmitter&amp;amp;lt;Stri...原创 2018-08-15 15:21:57 · 381 阅读 · 0 评论 -
关于android:descendantFocusability
最近修改一个功能,EditText一开始默认不获焦点,等点击Edittext的时候,再获得焦点并弹软键盘。 按照常规操作, 一开始在代码中设置Edittext没有焦点:tv_subject.clearFocus();当它需要焦点的时候,让其获取焦点: tv_subject.setFocusable(true); tv_subject.setFocusableInTouchMode(true);原创 2018-02-01 11:12:04 · 1552 阅读 · 0 评论 -
更新github项目上的代码
最近经常要更新github上已有项目的代码,这里对一些命令进行记录1.查看状态:git status2.从远程拉取最新代码(一般不是手贱在github上修改readme文件,如果没这一步会报错)git pull origin master3.添加所有代码到缓存区:git add .4.提交代码:git commmit -m "更新说明"5.将更新原创 2017-12-11 15:47:54 · 997 阅读 · 3 评论 -
关于EditText的一些小事
EditText的使用场景有很多,例如用户登录的时候,输入信息的时候。所以我觉得有必要写篇文章记录一下。1.inputType:EditText的输入类型 android:inputType="text" android:inputType="textCapCharacters" 字母大写 android:inputType="textCapWords" 首字母大原创 2018-01-24 15:46:32 · 1145 阅读 · 0 评论 -
简单的MVP写法(二)
前面已经写了简单的MVP写法(一),现在介绍另外一种MVP的写法。 这种写法分为三层 Model :public abstract class BaseModel {}View :public interface BaseView{ void onError(String e); void setPresenter(); Activity getCurrentActivity(原创 2017-12-01 09:59:38 · 572 阅读 · 0 评论 -
Dagger2使用
Dagger2的引入(与retrofit和rxjava一起使用): 在app的build.gradle中加入 //network compile "com.squareup.retrofit2:retrofit:$rootProject.ext.retrofitVersion" compile "com.squareup.retrofit2:converter-gson:$r原创 2017-12-01 14:18:13 · 717 阅读 · 0 评论 -
自定义控件之AddItemView
一个需求,直接上gif图:(1)点击 添加选项按钮,会增加一个item (2)然后切换类型的时候,需要清除所有的item,添加另一种类型的item下面来完成这个自定义控件,让它继承自ViewGroup public class CustomAddViewLayout extends ViewGroup 构造函数的,可以简单地写一写: public CustomAddViewLayout(Co原创 2017-12-19 20:24:51 · 527 阅读 · 0 评论 -
底部导航栏中间突出范例
首先先看一下实现的简单布局: 实现这个布局的核心是要在根布局添加该属性android:clipChildren="false"这个属性的意思是是否限制子布局在其范围内,默认是true,表示限制1.xml代码:这里放了五个LinearLayout配合上面的容器进行切换<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/a原创 2017-12-13 14:40:46 · 1353 阅读 · 0 评论 -
仿ios的PickerView
首先看一下效果:这个一个点击按钮弹出的dialog,中间是一个类似于ios的PickerVew。 接下来看一下它是怎么实现的: 具体的pickerView,我使用了一个第三方写的,这里就不贴上代码了。 主要是看一下,dialog与pickerView的结合使用: 首先是这个布局:中间是一个PickerView<?xml version="1.0" encoding="utf-8"?><Li原创 2017-12-23 14:07:11 · 702 阅读 · 0 评论 -
ConstraintLayout完全解析
本篇文章的主题是ConstraintLayout。其实ConstraintLayout是Android Studio 2.2中主要的新增功能之一,也是Google在去年的I/O大会上重点宣传的一个功能。我们都知道,在传统的Android开发当中,界面基本都是靠编写XML代码完成的,虽然Android Studio也支持可视化的方式来编写界面,但是操作起来并不方便,我也一直都不推荐使用可视化的方式来编转载 2017-12-26 14:21:25 · 283 阅读 · 0 评论 -
由Static引起的内存泄漏问题
什么是内存泄漏? 通俗地讲,就是程序在向系统申请使用内存后,在使用完以后并没有释放内存,而导致该内存一直被占用。直到程序结束,我们也无法再使用这边内存。这里说一下遇到的一个由static关键字引起的内存泄漏问题。 通过内存泄漏检测工具,我发现我前几天写的代码中,有某一个内存泄漏发生了:某工具类一直持有某个Activity对象。我翻了一下代码,发现是这样的: 我有某个ScreenUtil工具类,原创 2017-12-26 15:56:43 · 3603 阅读 · 0 评论 -
Android上传图片到服务器
拍照或者从相册选取图片需要申请权限,这一步做完了以后,经过一系列操作之后在onActivityResult方法中会有回调,通过switch返回的requestCode区分是拍照还是从相册选取,本地需要指定一个File,用于存放选中的图片。 这里假设图片已经拿到了。 @Multipart @POST("******************************")上传图片需要使用po原创 2018-01-03 11:27:31 · 2959 阅读 · 0 评论 -
Android主题换肤
前几天在研究主题换肤功能,然后在自己的一个App框架Demo中尝试了主题换肤,功能是实现了,就是效果还没有那么完善。1.引入:首先在自己的build.gradle中引入该第三方框架,第一项是必选的,后面三项可以根据自己的需求来。compile 'skin.support:skin-support:2.2.3' // skin-support basic widge原创 2018-01-05 10:29:02 · 872 阅读 · 0 评论 -
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 · 811 阅读 · 0 评论 -
Android7.0调用系统拍照和剪裁
从 Android 7.0 开始,应用私有目录的访问权限被做限制。我们不能够再简单地通过 file:// URI 访问其他应用的私有目录文件或者让其他应用访问自己的私有目录文件。而且从7.0开始,当我们在应用中使用包含 file:// URI 的 Intent 离开自己的应用时,程序会发生故障。开发中,如果我们在使用 file:// URI 时忽视了这两条规定,将导致用户在 7.0 及更高版本系统的原创 2018-01-05 14:11:52 · 692 阅读 · 0 评论 -
基于IjkPlayer的视频播放器
最近在GitHub上看到一款基于IjkPlayer的视频播放控件,觉得不错,所以就体验了一下。它的功能挺强大的,主要有一下几点: 支持 边播边缓存,使用了AndroidVideoCache。 支持 其他协议和编码concat、rtsp、hls、rtmp、crypto、mpeg等。 支持 DEMO演示获取视频第一帧等实现。 支持 简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊原创 2018-01-24 16:26:09 · 1727 阅读 · 0 评论 -
从底部弹出的PopupWindow
嗯哼,最近有个新的需求,需要做一个从底部弹出的popupWindow,让Android向ios看齐。。。本来Android的是右上角弹出一个pop就好了。。。首先是简单的布局,一个LinearLayout下放三个textview"http://schemas.android.com/apk/res/android" android:orientation="vertica原创 2017-11-25 10:22:47 · 555 阅读 · 0 评论 -
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 · 7346 阅读 · 3 评论 -
系统通话界面 自定义来电显示
上一篇文章写了使用WindowManager实现从自己的app界面拨打电话调用系统通话展示自定义布局。这一篇文章主要介绍一下使用BroadcastReceiver、Service配合WindowManager实现当有电话打进来时,搜索该号码是否是自己app内的用户(好友),显示特定的信息。既然使用了BroadcastReceiver和Service,首先先介绍一下BroadcastReceiver和原创 2018-01-31 14:40:43 · 6965 阅读 · 4 评论 -
Rxjava2源码学习(二)
上一篇中看了Rxjava的通过链式调用来实现数据的传输,这一篇接着看加上线程切换之后,整个流程是怎样的。还是以下面这个流程为例:Observable.create(new ObservableOnSubscribe&amp;lt;String&amp;gt;() { @Override public void subscribe(ObservableEm...原创 2018-08-15 15:22:07 · 345 阅读 · 0 评论