- 博客(68)
- 问答 (1)
- 收藏
- 关注
原创 Android框架——RxJava异步开发框架
介绍RxJava是ReactiveX的Java实现,通过这个框架我们可以很方便的进行数据的异步获取,并对数据进行分步转换。RxJava基本使用引入依赖 implementation 'io.reactivex.rxjava2:rxandroid:2.1.0' implementation 'io.reactivex.rxjava2:rxjava:2.2.3'创建观察者首...
2019-05-15 23:23:35 1205
原创 Android框架——Retrofit网络框架
介绍Retrofit是一款针对Android网络请求的框架,它的底层是OKHttp实现的,可以用注解来定义请求的格式。基本用法引入依赖 implementation 'com.squareup.retrofit2:retrofit:2.3.0'//导入retrofit //支持json类型的格式转换成model implementation 'com.squareup.re...
2019-05-15 16:30:19 434
原创 Android框架——Okhttp网络框架
介绍OkHttp是Android中使用非常广泛的一个网络框架,如果使用HttpUrlConnection可能会有些繁杂,使用okhttp可以轻松解决网络链接问题。基本用法引入依赖compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.8.0'compile group: 'com.squareup.okio',...
2019-05-14 23:43:00 267
原创 Android框架——EventBus事件总线
介绍EventBus是Android中比较流行的事件总线框架,可以无耦合的在各个组件之间传递事件,本篇文章就来介绍一下它的用法与部分重要源码。使用方式使用EventBus需要关注几个步骤:注册监听类定义事件类实现事件回调方法发送事件注册监听类在组件里调用register方法,可以让EventBus注册此类中定义的订阅方法。EventBus.getDefault().regi...
2019-05-10 18:30:47 1578
原创 Android并发——阻塞队列,线程池以及AsyncTask
介绍阻塞队列,线程池与AsyncTask都是Android开发中经常用到的技术,其实这三种技术中是有引用关系的,AsyncTask将Runnable存储在线程池中,线程池内存储Runnable的位置是阻塞队列,接下来我们从下到上了解一下这三者的相关知识。阻塞队列简介阻塞队列常用于生产者-消费者场景。特征为数据满的情况下,生产者生产会被阻塞;数据空的情况下,消费者消费会被阻塞。Blocki...
2019-05-08 16:37:41 871
原创 AndroidUI——CoordinatorLayout与CollapsingToolbarLayout实现ToorBar折叠效果
可见区域的大小在移动设备中是非常重要的,有的时候我们在滑动list的时候,上方的ToolBar可以自动隐藏掉,从而使得下方的可见区域变大,提升用户体验,先看一下最终的效果:我们一步一步来完成这个过程。使用CoordinatorLayout来搞一个可以上滑出去的Toolbarxml代码还是用的前几个的结构,只需要改造部分属性就可以了。将包裹的布局改为CoordinatorLayout在To...
2019-04-25 17:56:53 454
原创 AndroidUI——使用DrawerLayout和NavigationView完成侧边栏
侧边栏也是一种应用很广泛的布局,如果使用自定义控件实现侧边栏需要费一些功夫,使用系统的DrawerLayout和NavigationView可以很快的做出侧边栏效果。DrawerLayout这个布局包含有两个子元素,第一个子元素是主内容布局,第二个子元素是滑动时才能显示出来的抽屉布局,在抽屉布局里,需要设置 android:layout_gravity=“start” 属性,来控制抽屉布局的显...
2019-04-25 15:29:33 678
原创 AndroidUI——使用TabLayout实现分页
实现一下TabLayout与ViewPager结合的可滑动可点击的分页效果。尽量最小实现。主页面布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schem...
2019-04-25 11:27:45 815
原创 Android框架——PermissionsDispatcher
在我们开发应用时有时候可能会使用到一些敏感的权限,比如短信权限,电话权限等。如果要完整的处理一个具有权限的操作,需要关注以下几点:检测权限已有时的操作没有权限,申请权限成功的操作没有权限,申请权限失败的操作没有权限,申请权限失败,且勾选了不再提示时的操作PermissionsDispatcher是一个在Android中可以通过注解形式申请动态申请权限的框架。使用Permissions...
2019-04-24 14:58:52 575
原创 AndroidUI-约束布局ConstrainLayout
参考资料[约束布局ConstraintLayout看这一篇就够了](https://www.jianshu.com/p/17ec9bd6ca8a)约束布局ConstrainLayout约束布局的出现主要是为了解决试图层级嵌套过多的情况,它可以在api9以上的版本使用。从2.3开始,官方的模板默认使用ConstrainLayout。1.引入依赖使用约束布局需要引入以下依赖: imp...
2019-04-14 01:44:01 731
翻译 Android群英传学习-Android绘图机制与处理技巧
屏幕的尺寸信息屏幕参数屏幕大小,指屏幕对角线的长度分辨率,手机的像素点的个数PPI,每英寸像素系统屏幕密度独立像素密度dp使用mdpi作为标准,此情况下1px=1dp 密度越高,1dp所对应的px就会越大单位转换/** * 将px转换为dip * @param context * @param pxValue * @return */
2017-10-25 15:10:22 265
翻译 Android群英传学习——ListView优化
常用优化技巧使用ViewHolderViewHolder利用了ListView的视图缓存机制,避免每次getView的时候都去重新实例化对象,提高效率。设置项目分割线使用android:divider属性设置分割线 设置@null为透明分割线 dividerHeight属性设置分割线的高度隐藏滚动条android:scrollbars=”none”取消Item点击效果android:itemSel
2017-10-09 13:30:03 171
翻译 Android群英传学习——控件架构与自定义控件
控件架构一般控件分为两类,View和ViewGroup。ViewGroup可以包含多个View。通过ViewGroup整个界面上的形成了一个控件树,每个控件树的 根部,都有一个ViewParent对象,作为整棵树的控制对象。每一个Activity都包含一个Window对象,通常是PhoneWindow,它将一个DecorView作为窗口的根View,它将需要显示的所有内容都显示在Window上。里
2017-10-08 16:11:48 223
原创 圆圈中最后剩下的数
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最后一个小朋友
2017-10-06 16:49:01 162
原创 扑克牌顺子
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就
2017-10-06 16:23:41 283
原创 翻转单词顺序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路:先翻转整个字符串,再以字符串作
2017-10-06 16:06:39 185
原创 左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!public class Solution { public String LeftRotateStr
2017-10-05 10:06:36 139
原创 和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。思路:维护两个指针,一个指向第一个元素,一个指向最后一个元素,若两个元素的和比目标数字大,则后指针前移,否则前指针后移,直到找到符合条件的情况,输出。import java.util.Ar
2017-10-05 09:25:28 187
原创 和为S的连续正数序列
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出所有和为S的连续正数序列。序列内按照从小至
2017-10-05 00:48:10 141
原创 数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:任何两个相同数字的异或都是0,一部分数字中若只有一个数字没有重复值,则它们共同异或的结果就是这个数字。现在需要将数字分成两个数组,各包含一个出现一次的数字,异或出的结果就是答案。//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public cl
2017-10-05 00:30:07 193
原创 平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:计算每个节点左右子树的高度,进行比较,差大于1说明不平衡, 这个代码有重复计算问题。public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root == null) return true;
2017-09-25 11:47:29 107
原创 二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:遍历树,每一层高度+1,到叶子节点则开始返回。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNo
2017-09-25 11:35:56 288
翻译 Android小技巧
来源:郭霖——《第一行代码》(第二版)全局获取Context自定义一个MyApplication类,继承自Application。public class MyApplication extends Application{ private static Context context; public void onCreate(){ context = getApp
2017-09-25 11:20:45 135
原创 数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数。思路:多重二分查找public class Solution { public int GetNumberOfK(int [] array , int k) { int result = 0; if(array == null) return 0; int start = 0;
2017-09-25 09:29:36 138
原创 两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点。思路:使用两个栈,将两个链表的元素压入栈,逐步同时弹出,当栈顶元素不同时,刚刚弹出的元素就是它们的第一个公共结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/
2017-09-25 09:08:56 179
原创 Sax解析和Pull解析的使用方法
Pull解析: XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(new StringReader(mNetworkDa
2017-09-23 21:26:13 233
原创 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路:拆分之后将子数组排序,排序过程中计算逆序对的个数。合并到上一级继续排序和统计。import java.util.*;public class Solution { public in
2017-09-23 20:13:51 146
原创 第一个只出现一次的字符
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置思路:新建一个字符数组存储遍历到的字符位置,出现多次则忽略, 最后遍历数组,把出现一次字符的下边相比,返回最小的一个。import java.util.*;public class Solution { public int FirstNotRepeatingChar(String
2017-09-23 16:53:04 207
原创 丑数
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:2,3,5的倍数中大于上一个丑数,且最小的那一个作为下一个丑数。public class Solution { public int GetUglyNumber_Solution(int index) {
2017-09-23 16:11:41 146
原创 把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:排序需要比较两个元素的“大小” ,两个字符串拼成一个字符串,比较字典顺序,如果前边的大返回true,如果后边的大返回false, 排序完成之后再拼接成一个字符串。import java.util.ArrayList;
2017-09-23 15:31:47 116
原创 整数中1出现的次数
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。思路: https://www.nowcoder.com/questionTerminal/bd7f9783020
2017-09-23 14:45:45 237
原创 连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)
2017-09-23 10:20:30 165
原创 最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:建立一个大小为K的数组,然后遍历这N个整数,当前数组元素个数小于k,直接加入,如果当前元素大于K,比较当前数和数组中的最大的数,保留小的舍弃大的。import java.util.*;public class Solution { public ArrayLis
2017-09-23 10:08:27 126
原创 数组中超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:定义一个变量存储当前元素,一个计数器存储次数, 若次数等于0,则重新取字符。 若次数大于零,遇到相同字符计数器+1,不同字符计数器-1 最后留下的字符遍历一圈,判断一下次数即可。
2017-09-22 21:44:59 195
原创 字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:递归实现,先确定第一个字符,再求后面字符串的全排列。 确定一个字符时将它与后面的交换,同时调整位置。import java.util.ArrayList;public class Solution { pub
2017-09-22 21:37:18 144
原创 复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:分成三步走 1.在原结点后面加入复制结点,原链表长度变为2倍 2.将复制节点的random值设为源节点的random值的next 3.分离两个链表/*public clas
2017-09-22 19:29:27 125
原创 二叉树中和为某一值的路径
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:遍历每个路径,使用克隆避免添加删除元素import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeN
2017-09-22 17:39:40 159
原创 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:最后一个元素是根节点,以根结点为标志,从前往后找到第一个比它大的数字,记录下这个位置作为中间位置。继续往下比,如果后边的元素比它小,就返回false。中间位置前是左子树,后面位置是右子树,递归遍历左右子树即可。public class Solution {
2017-09-22 17:05:24 145
原创 从上到下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:层次遍历import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { th
2017-09-22 16:11:46 197
原创 栈的压入,弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:遍历弹出序列,确认每一个需要弹出的元素,如果不在栈顶,就把前一个序列压入栈中,如果一直到结尾还没
2017-09-22 14:31:45 256
空空如也
android 导入v13包后不能make
2016-07-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人