自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (5)
  • 收藏
  • 关注

原创 这样一定能理解Binder跨进程

在Android开发中,一说到跨进程通信首先想到的就是AIDL接口,然后就是Binder通信机制。其实,AIDL接口用起来是很简单的,但是由于接口的具体实现代码又工具生成,并且为了让它变得简单,实现中还增加了许多的“冗余”代码,导致许多人虽然用AIDL跨进程用得飞起,却始终摸不到Binder的样子。本文就是要把AIDL的实现给掰开揉碎,看看里面的Binder究竟是如何工作的。AIDL有多简单?如果...

2018-06-21 23:00:39 604

原创 深入解析Android Design包——Behavior

上一篇深入解析AndroidDesign包——NestedScroll 已经说过了,在AndroidDesign包中主要有两个核心概念:一是NestedScroll,另一个就是Behavior。 相比于NestedScroll这个概念来说,Behavior分析起来会难很多,因为它几乎遍布了AndroidDesign包的每一个控件,种类繁多;另外Behavior提供了二十多个空方法给使用者来重写,主

2017-06-29 14:15:23 2399 2

原创 深入解析Android Design包——NestedScroll

Android开发中滑动冲突的问题一直是编写界面时的一个老大难问题,比如ScrollView+ListView的嵌套基本是没办法实现滑动的自然切换的可能导致UI绞尽脑汁想出来的创意开发人员没办法实现。为此,Google推出了一个support包——Android Design.

2017-06-23 21:57:00 820

原创 Android移植lame库(采用CMake)

貌似许多人都是从lame库开始入门Android NDK开发的,在网上一搜一大堆详细教程。本篇的亮点是采用Google推荐的CMake工具(不是ndk-builder)来移植lame项目。重点写一下与ndk-builder的差异,而非教程。1.CMake是什么?这个是AndroidStudio 2.2以上的版本才可使用的,跟ndk-builder一样是一款原生构建工具。

2017-06-15 15:57:45 2863

原创 滑动冲突研究之ScrollView+ListView

有一定经验的Android开发者应该都遇到过类似的需求,看图 简单来说就是外层一个ScrollView,在内部又需要一个ListView来展示数据,在滑动时ListView上部的控件需要先收起来。 现在为了达到这种效果,主流是两种做法: 1.编写一个UnscrollListView,即不可滑动的ListView,然后将其嵌套在ScrollView中,这样就避免了滑动冲突的问题了。但是这样

2017-03-19 12:31:14 1804 1

原创 ViewPager源码分析

1.问题由于Android Framework源码很庞大,所以读源码必须带着问题来读!没有问题,创造问题再来读!否则很容易迷失在无数的方法与属性之中,最后无功而返。 那么,关于ViewPager有什么问题呢? 1. setOffsreenPageLimit()方法是如何实现页面缓存的? 2. 在布局文件中,ViewPager布局内部能否添加其他View? 3. 为什么ViewPager初始化

2017-02-24 17:53:26 4370

原创 Intent传递数据底层分析

我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法。 但是不知各位有没有想过这样一个问题:ActivityB中获取到的对象跟上一个Activity中的那个对象有什么关系? 换句话说就是,我在ActivityB中通过Intent获取的对象跟ActivityA中的那个对象,有没有可能是同一个对象? 按照常理来说,博主

2017-02-24 11:57:33 1536

原创 Android系统字体大小如何影响app的字体大小?

在Android应用开发过程中,一定会碰到本来完美的布局,在系统字体大小设置【最大】时变成一团浆糊。解决办法网上也有很多,但是分析原理的却几乎没看到。但是作为开发人员必须懂得举一反三,而要举一反三就必须要“知其所以然”,于是博主就去探寻了一番,才有了此篇文章。

2016-12-25 00:54:05 7231 3

原创 ViewGroup是如何加载布局中的view?

LayoutInflater如何加载布局?上面链接中的内容是此篇文章的基础,如果对LayoutInflater原理不熟悉可以去参考一下。1.问题由来本来在看CoordinatorLayout的源码,然后发现它内部定义了一个LayoutParams。那么问题就来了,在布局文件中的childView是没有置顶LayoutParams的,那么只有在childView创建的时候,由CoordinatorLa

2016-12-14 16:40:43 3082

原创 设计模式之Bridge模式

本文内容是通过学习《设计模式解析》 by - Alan Shalloway, James R. Trott 一书所总结的心得。博主想通过先提出问题,再解决问题的方式来让读者实际体验一把Bridge模式的优势。(这也是《设计模式解析》一书中采用的讲解流程,对于读者理解会有很大帮助)文中的案例也是使用的书中提供的案例。1.提出问题先看需求:有两个绘制实例D1和D2,它们都提供了drawLine和draw

2016-12-08 17:39:03 1151

原创 LayoutInflater如何加载布局?

对于有一定Android开发经验的同学来说,一定使用过LayoutInflater.inflater()来加载布局文件,但并不一定去深究过它的原理,比如1.LayoutInflater为什么可以加载layout文件?2.加载layout文件之后,又是怎么变成供我们使用的View的?3.我们定义View的时候,如果需要在布局中使用,则必须实现带AttributeSet参数的构造方法,这又是为什么

2016-11-22 14:29:14 1453

原创 如何实现ListView Item的动画?

本文是通过分析github上的cypressious-AnimationListView控件来讲述如何给ListView的Item添加动画效果。先看看它的效果吧图片来自cypressious的github项目示例图 这个AnimationListView是我使用AnimationListView来实现的一个例子,在AnimationListView.java中添加了一些注释,方便理解。在例子中还包

2016-10-17 20:39:54 2835

原创 一步一步带你写一个dagger2的Demo

1.MVP模式简介我们的目标是实现MVP模式来开发我们的应用,那首先得知道什么是MVP模式。下面这篇文章讲述得通俗易懂,非常适合新手学习。MVP模式简单易懂介绍这里简单讲一下,M ----  model,即数据层V ----  view,即界面层比如我们的Activity和FragmentP ---- presenter, 即业务层,我个人觉得更像是管理层。管理数据如何显示,管

2016-10-11 16:59:19 3359 1

原创 从Observer模式的角度分析AdapterView源码

对于程序员来说,不过你属于哪个品种(c++,java,js,c#...)这些特定的语言都是在不断更迭的,熟悉的SDK也总有一天会被淘汰掉,所以在我看来,真正能属于自己的就是那些融入你的思维中的东西,例如设计模式。这也是我下决心研究设计模式的最大动力。在此先推荐一本好书《设计模式解析》 by - Alan Shalloway, James R. Trott本人也是尝试过无数次学习设计模式,然

2016-09-25 21:37:15 669

原创 自定义ScrollEditText,解决ScrollView中嵌套EditText的问题

首先,说一下这个控件实现的功能。1.EditText中的内容可上下滚动,通过截取ScrollView的触摸事件2.当EditText中内容滚动到了底部,继续上滑则外面的ScrollView向上滚动3.当EditText中内容滚动到顶部,继续下滑则外面的ScrollView向下滚动4.当EditText中无内容,手指在EditText中滑动可以控制ScrollView的滚动

2016-09-22 14:54:58 5117 3

原创 如何动态测量ListView的高度?

网络上已经有很多这方面的文章,甚至完整的代码。但是,我发现如果ListView的Item布局比较复杂,或者某个View有多行显示时,网上的代码测量出来的高度是错误的。这里,结合自己的实践以及一些stackOverFlow的参考,进行一下总结。首先,从网络上的方法开始。如果你搜索“动态测量ListView的高度”,你会看到很多类似下面的代码 // 动态改变listV

2016-06-03 14:35:40 6889 3

原创 细读百度地图点聚合源码(下)---Renderer类解析

上一篇文章分析了ClusterMananger的整体结构和核心算法 细读百度地图点聚合源码(上),此文是接着上一篇来的。在本文中,我们将学习如何在UI线程中做大量的操作,并且不会造成界面卡顿。

2016-05-13 22:09:08 12877 24

原创 细读百度地图点聚合源码(上)

之前在项目中需要用到百度地图的点聚合,看了百度提供的demo之后,稍微读了一些源码就能达到需求了,所以并未深入解读源码。最近有空就把百度实现点聚合的源码从里到外仔细研究了一遍受益良多,在此分享一下。为了方便研究我把百度demo中点聚合相关的类抽出来,新建了个工程,有需要可以下载来研究。整个源码分析过程我分为三个部分:1.整体结构分析2.核心算法分析3.实现点聚合本篇为上篇,主要分析1,2部分。之后还会有个下篇,着重分析具体如何实现marker点聚合以及一些动画处理,这一部分百度处理的非常精妙。

2016-04-20 23:27:10 22932 15

原创 Realm多线程中的那些坑...

个人在开发中遇到的一些小坑... 可能会持续更新...1.RealmObject自带线程保护功能,只能在创建它的线程中访问,在子线程中不能访问。也就是说,如果你在主线程中new了一个RealmObject对象 user,那么在子线程中是访问不了user对象的。要想在子线程中访问,必须先将user存入Ream中,然后在子线程中query出来。2

2016-04-01 23:55:26 10388

原创 Realm实战总结---Android

数据库一直以来给我的感觉就是——麻烦!!!接触了Realm之后才终于可以开开心心的使用数据库了。本文总结一些Realm数据库的常用知识点,包括多线程访问,以及如何与Retrofit2.0一起使用等...看懂这些知识点之后,个人认为就可以在一般的项目中使用Realm了。

2016-03-30 16:50:26 11517 3

原创 ListView 处理Item的选中状态(checked)

在开发筛选条件相关的界面时,会用到如下界面,左栏选择一项,右边跳出子栏继续选择。如图:实现起来也不难:      1. 建立一个Activity,layout中包含两个FrameLayout2.建立一个fragment,布局直接使用ListView3.将fragment放入Activity的FrameLayout中。4.实现Activity对fragment的赋值,

2016-03-18 14:33:43 12046

原创 ListView显示最后一条Item不完整问题分析

比如,有这么一个需求:实现一个IM类型的app聊天界面要如何做呢?很简单,一个title在顶部,一个输入框+按钮在底部 ,中间是一个ListView,搞定!!!然后,ListView需要动态添加Item内容,并且,每添加一条Item都需要将ListView显示在最后一条。好了,这次要解决的就是上面加粗部分的问题。这时候有人要说了,调用setSelection()

2016-02-24 21:51:52 11118 7

原创 ScaleGestureDetector接收双击手势问题

今天遇到这么一个问题:使用ScaleGestureDetector来监听手势操作,本意是想实现双指手势缩放的功能。但在测试中,发现一个“Bug”—— 单指双击不抬起,然后移动手指,发现图片也在缩放!虽然这个功能很酷炫,但不是我要的效果啊,而且与我的其他功能有冲突,于是,网上各种搜索“ScaleGestureDetector + DoubleClick”,然而并卵。网上的结果,全是用Ge

2016-01-20 14:51:03 1496

原创 RemoteService之AIDL进程间通信 ---基于AndroidStudio

最近项目中碰到个问题,应用退出之后(通过调用System.exit(0)),弹出的Toast很久的不消失。原因是项目中使用了环信的SDK,其中有个处理后台推送的Service环信专门为其加了个so文件,目的是为了防止Service被杀死。同事将该Service设置为android:process = "remote" ,即使Service运行的进程与主进程分开,toast确实是消失了,但是

2016-01-09 11:09:40 808

原创 实现可缩放的马赛克控件---Android

需求:实现可以缩放、移动和打马赛克的控件。由于之前对图片处理的经验很缺乏,所以拿到需求的第一步我就从github上面找相关的项目。然后,就找到了这个项目:ProMosaic 这个项目有两个痛点:1.加载图片未处理尺寸,当尺寸过大时,会内存溢出(小问题)2.未实现缩放功能正文:一、ProMosaic实现马赛克原理分析首先,在内存中有三层Bitmap:bmBaseL

2015-12-14 17:06:42 2722 2

原创 简析百度地图点聚合功能----ClusterManager类

在百度地图提供的Demo中,已经提供了一个很简单的点聚合的demo程序,主要用到的类就是ClusterManager用来管理各个Marker的聚合,另外就添加了一个实现了ClusterItem接口的MyItem,用来管理各个Marker的数据。demo实在太简单了,要实现自己的功能还是得去啃与Cluster相关的类,很累人!!刚好最近有这方面的需求,就去啃了一把cluster相

2015-12-05 14:52:40 10832 10

原创 Handler如何移除Message

问题:1.removeMessage(what)函数是否只能移除对应what值的Message?2.对于Delayed发送的Message,能否提前remove?代码测试:package javine.k.testhandler;import android.app.Activity;import android.os.Bundle;import android.o

2015-05-24 17:48:13 10479

TestListView源码

1.该项目为AndroidStudio工程 2.项目中代码逻辑比较简单,只是验证listview加载最后一条item时,加载不完整。

2016-02-24

TestListView加载最后一项源码

此工程为AndroidStudio工程,代码逻辑很简单,只是验证了listview为什么有时候添加一条item时,不能显示item的全部内容。

2016-02-24

MyRemoteService

此demo主要演示如何通过aidl接口来实现多进程间的通信。在demo中有一个activity和一个service分别属于两个不同的进程,通过aidl接口来实现在activity中调用远端进程中的service的函数。

2016-01-09

可缩放的MosaicView

在ProMosaic的基础上,实现多指缩放和移动的功能。 将图片压缩之后,打马赛克时还算比较流畅。

2015-12-14

一个不错的万年历源代码(C语言)

文件只包含一个C文件和一个H文件,无工程... 使用了数组查表法,效率较高。 输入公历日期得到农历字符串。 非本人原创部分仅供研究与学习之用。如想商业使用,请与原作者Campo联系——虽然我也不知道他的联系方式 ^o^

2011-11-16

空空如也

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

TA关注的人

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