自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (2)
  • 收藏
  • 关注

原创 Https解决的问题及其连接过程

Https介绍HTTPS 是综合了对称加密和非对称加密算法的 HTTP 协议。既保证传输安全,也保证传输效率Http存在的问题1.窃听风险:Http采用明文传输数据,第三方可以获知通信内容2.篡改风险:第三方可以修改通信内容3.冒充风险:第三方可以冒充他人身份进行通信对上述问题,Https的解决办法(使用SSL/TSL)1.所有信息加密传输,避免三方窃听通信内容2.校验机制,内容一旦被篡改,通信双发立刻会发现3.配备身份证书(CA证书),防止身份被冒充加密算法(解决窃听风险)Https

2020-05-16 15:30:47 1112

原创 安卓开发 自定义ScrollView 实现滚动,停止状态的监听

Scrollview或者NestScrollView没有提供对其状态的监听(类似Recyclerview的OnScrollListener.onScrollSateChanged接口),只能自己实现。在百度以后,发现大多数采用的都是新开一个线程,延迟一小段时间来判断是否已经暂停,都是直接在onTouchEvent()的MotionEvent.ACTION_UP中判断是否已经暂停,没有对Flin...

2019-11-30 14:42:16 1188

原创 安卓开发 内部类和匿名内部类所造成的的内存泄漏

内存泄漏定义(个人理解):当一个对象本该被回收,但是因为有对象正在持有他的引用,导致他无法正常被回收,称为内存泄漏。例如一个匿名内部线程需要睡眠了10秒,我们在第5秒钟的时候推出了界面,此时线程还在执行,并且由于匿名内部类持有外部类的引用,所以导致了无法及时回收,造成内存泄露。(使用Leakcanary对上述情况做测试,发现在任务执行完以后就不报内存泄漏了,也就是说在执行完以后被回收了,那部分...

2019-11-19 22:23:49 1096

原创 安卓开发 自定义TextView 去除默认内边距

一.搜到的大部分的解决办法1.网上方法的效果在xml文件中对TextView设置: includeFontPadding=false加上以上属性之后,文本的高度明显变小了,但是没有达到我们预想的效果(文字紧贴边框),而是在上下留了一部分距离。具体效果可以查看第二部分中的对比图2.失效的原因在了解这个原因前需要对TextView中文本的绘制有一点了解,具体查看文末参考文...

2019-08-16 16:37:32 2577 2

原创 安卓开发艺术笔记 | 动画解析(View动画,帧动画,属性动画)

一.VIEW动画 view动画的种类 自定义view动画 view动画的特殊类型 二.帧动画三.属性动画属性动画的分类 和View动画的区别 插值器与估值器 属性动画的使用 属性动画的监听器 属性动画工作原理 属性动画的注意事项四.动画注意事项一.View动画1.view动画种类(1)分类注意:view动画不改变V...

2019-04-20 12:48:06 182

原创 安卓开发艺术笔记 | View的事件体系(View的分发,滑动冲突的解决)

目录一.View的基本概念1.什么是View2.View的位置参数3.MotionEvent和TouchSlop4.VelocityTracker,GestureDetector二.View的滑动1.View的ScrollTo和ScrollBy2.动画3.LayoutParams三.View的弹性滑动1.Scroller2.动画3.延时策略四...

2019-04-12 10:49:07 194

转载 安卓开发艺术笔记 | View的工作原理(绘制流程和自定义View)

目录一.MeasureSpecMeasureSpec基础 MeasureSpec和LayoutParams关系二.View的绘制流程onMeasure() onLayout() onDraw()三.自定义View自定义view分类 自定义view步骤 自定义view的注意事项一.MeasureSpec1.MeasureSpec基础(1)组成:MeasureS...

2019-04-11 22:49:20 243

原创 算法 | 单链表的五个常见操作

问题:1.单链表反转:事先存好下一个节点再改变指针2.链表中环的检测:快慢指针终会相遇3.两个有序链表的合并:两个链表各一个指针,比较大小后加到最终的链表中(有点快排的感觉)4.删除链表倒数第K个节点:转化为删除正数第length-K+1个节点5.求链表的中间节点:快慢指针思路都在代码的注释中,做链表的画张图就能更好的关注逻辑,比较直观,所以强烈建议画图来看看指针怎么走。...

2019-04-11 17:10:02 493

原创 算法 | 判断是否为回文字符串

问题:字符串是否为回文字符串,如abcba (单链表储存)思路: 快慢指针找到中间节点,并且在慢指针移动时改变node的指向。 找到中间节点以后,从中间节点出发,前后遍历比较值步骤: 1.判断传入节点是否为空,接下来节点是否为空(非空判断) 2.快慢指针移动,快指针正常移动,慢指针在移动时,改变node的指针方向,指向前一个 ...

2019-04-11 11:23:24 639

转载 安卓开发艺术笔记 | Activity生命周期与启动模式

目录:生命周期解析正常生命周期 异常情况下生命周期四种启动模式及设置方式 隐式启动Activity时IntentFilter匹配规则 生命周期解析1.正常生命周期(1)onCreate():状态:Activity 正在创建 任务:做初始化工作,如setContentView界面资源、初始化数据 注意:此方法的传参Bundle为该Activity上次被异常情况销...

2019-04-08 18:32:52 344

原创 算法学习 快速排序

算法概述:快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。是分而治之的典型用例,由于使用了递归,所以对于小规模的数据,速度可能还不如快速排序,所以就需要一个标志位,...

2018-12-09 12:56:37 261

原创 targetSdkVersion,minSdkVersion,compileSdkVersion的介绍

首先介绍一下概念:targetSdkVersion:目标软件开发版本,该值即为app的API的版本API :Application Programming Interface,即应用程序编程接口,提供了很多方法供我们调用,高版本API兼容低版本API。Android 7.0:定义了手机系统的版本,不同版本的系统给用户提供不同的功能,如Android 7.0 多窗口支持等。开发的app要...

2018-12-04 16:02:45 622

原创 算法学习 归并排序

工作原理:分而治之的思想,先对小块的进行排序,再进行大规模的排序,由于小规模的有序,所以在归并时按顺序遍历即可归并排序的速度稳定在NlogN,因为不管序列如何,都要执行相同的操作。但是所需要的空间要很多,所以在大规模数据排序,内存却不够的情况下不适合。时间复杂度:NlogN递归算法的空间复杂度,只需要创建一个和原来数组一样长的数组,所以为O(N)非递归算法的空间复杂度,只需...

2018-11-30 12:54:49 108

原创 Java平台的理解

Java的特性:面向对象(继承,封装,多态)平台无关性(一次书写,到处运行)类库(IO/NIO,集合,网络,并发,安全等)GC垃圾回收机制JRE(Java运行环境,包括了JVM和Java类库,以及一些模块)JDK(JRE的超集,提供了更多工具,比如编译器等) Java是解释执行?不太准确Java的确是通过Javac先编译成字节码(.class文件),再通过JVM...

2018-11-26 21:35:38 120

原创 算法学习 《算法》2.1 希尔排序

工作原理:由于大规模乱序数组,插入排序的速度很慢,因为他只会交换相邻的元素,所以元素只能一点点的移动。当数组出现极端情况,如最小的值在数组的尽头,要将它挪到首位,就需要N-1次移动。为此,希尔排序横空出世。希尔排序的思想,通过交换不相邻的元素,达到对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。具体:给定一个增量h,对相隔h个的数字进行排序,排序完成后改变h的值,重复这...

2018-11-26 21:03:24 123

原创 BUG记录 java.lang.NoSuchMethodError: No static method combineMeasuredStates(II)I in class Landroid/sup

异常:ERROR: java.lang.NoSuchMethodError: No static method combineMeasuredStates(II)I in class Landroid/support/v7/widget/ViewUtils; or its super classes (declaration of 'android.support.v7.widget.View...

2018-10-28 19:33:12 3212

原创 数据结构 最大堆的实现

定义:最大堆要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树的关键字值。 APIAPI代码实现api分析:最大堆为完全二叉树,index(子节点)/2=index(父节点)操作中采用了哨兵,所以对应元素下标即为堆中的位置(从1开始)insert():插入时插到末尾,通过与父节点的比较,进行上浮操作deleteMax(MaxHeap H)...

2018-09-29 09:29:54 856

原创 二叉查找树的删除结点操作

二叉查找树:二叉查找树(Binary Search Tree),(又二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。例子:结点的删除操作:分三种情况讨论:结点为叶子结点时,直接删除,把父节点...

2018-09-22 14:23:41 495

原创 数据结构 二叉树的后序,层序遍历法(递归与非递归两种实现)

树的生成见上一篇博客后序遍历:1.遍历左边节点,到左叶子节点后返回父节点,切换到右子树2.遍历右边结点,遍历完后回到父节点记忆:左右根例子(注意,这里的树和我创建的树不一样!!!):代码实现:后序遍历的递归实现 public static void postOrderRecursion(TreeNode T) { if (T == null) ...

2018-09-21 22:40:12 208

原创 数据结构 二叉树的前,中序遍历法(递归与非递归两种实现)

先序遍历:1.访问根节点2.先序遍历其左子树3.先序遍历其右子树记忆:根左右例子:代码实现:1.首先创建一棵树 //生成树 public static TreeNode initTree(){ TreeNode G = new TreeNode("G", null, null); TreeNode H = new Tre...

2018-09-19 14:26:39 196

原创 数据结构 二叉树简介

树的特点N个节点构成的有限集合除了根节点以外的成为原来树的子树子树是不相交的除了根节点外,每个节点有些只有一个父节点一颗N个节点的书有N-1条边 相关名词:结点的度:结点的子树个数树的度:树的所有节点中最大的度数 二叉树采用儿子兄弟标志法的树,即有一个左指针指向儿子,一个右指针指向兄弟,可以减少空间的浪费特殊二叉树斜二叉树完美二叉...

2018-09-19 13:45:05 312

原创 算法学习 《算法》2.1 直接插入排序的三种实现方式

工作原理:每次指定一个待排序的元素,插入到前面已经排序号的序列中去,直到插完所有元素所以,每次只需要比较指定元素和其左侧的元素大小,交换一定次数即可达到左侧的有序本文提供三种实现方式:简单实现,减少交换次数的优化,加上哨兵位后的算法。并且在最后面测试这三中算法的效率。 简单版代码实现: public class SortMain { public sta...

2018-09-14 09:41:02 270

原创 算法学习 《算法》2.1选择排序

工作原理:首先找到数组中最小的元素,将他和数组的第一个元素交换位置(如果最小是自己就和自己交换)。在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,知道将整个数组排序,这种方法叫做选择排序,因为他一直在选择剩余元素之中的最小者。根据描述,我们知道,已经排序好的元素位于数组的左侧,每次只是交换位于右边的剩余元素。代码实现:public class SortMa...

2018-09-13 16:32:32 156

原创 安卓开发 Fragment的简单使用与解析

1.Fragment的简介:Fragment是Android3.0以后引入的新的api,为了适配大屏的平板。在普通手机开发的过程中,使用Fragment能实现一个界面的多次使用,能加快效率。Fragment可以被认为是Activity界面的一个布局,其依赖于Activity,但是拥有自己的活动事件与生命周期。可以通过替换Activity中的Fragment实现界面的优化处理。现在And...

2018-09-13 10:46:29 44784 5

原创 算法学习 《算法》1.5 并查集算法(Union-Find)

并查集算法是简单却又非常实用的一种算法。书上的例子可以非常清楚到位的概括这个算法使用的场景,那就是平面上有n个点,给定一条边既可以将两个点联通起来,现在有大量的这样的边,问最后有多少个连通子图?以下是并查集算法的功能;从一堆连接任意两个顶点的边信息中创建并查集 可以查询到任意两个顶点是否连通 对于指定边能够将该边的两个顶点连通起来让他们属于同一个子图 能够找到某一个顶点所在子图的根在...

2018-09-12 17:37:50 176

原创 自定义View View的绘制流程和自定义View的简单总结

View的绘制流程总的三步:onMeasure,onLayout,onDrawonMeasure(int widthMeasureSpec, int heightMeasureSpec)MeasureSpec的值由specSize和specMode共同组成的,其中specSize记录的是大小,specMode记录的是规格。specMode一共有三种类型,如下所示:1. EXACTL...

2018-09-12 11:20:03 416

原创 安卓开发 利用Face++实现人脸融合效果

由于最近有个需求,需要人脸融合,如是上网查了以下,发现Face++用的人挺多的,但是移动端的实现的blog都是直接复制他给的demo,还是挺繁琐的,于是自己看着api就写了一个小例子,希望让后面用的人方便一点。本demo中用的第三方控件有OKHttp,Gson,EasyPermissions而且人脸融合需要的两个api目前是免费的上个效果图步骤1.先去Face++官网注...

2018-09-03 08:57:13 2440 7

原创 Android中线程的终止

线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,不能再次start,只能新建一个线程对象。所以正常退出run方法,一般就能正常结束线程。在很多情况下,run中都有循环,所以我们只要跳出循环,让run方法执行完,也就正常终止了线程 对于线程的终止,经过查询资料,大部分人提到了三种方法,就先说这三种1.使用标志位来退出2.使用interrupt()方法(注...

2018-08-26 20:04:20 9306

原创 自定义Camera实现头像框效果,并裁剪指定区域合成

需要一个带框的相机,并且拍好后能合成框和人脸,不过需要人自己凑过去哈哈哈这两天看了很多博客,然后自己根据自己的要求改了改,基本可以用,调节参数可以获得想要的效果参考链接在最后面,要是看不懂我的,可以去看看他们的,都挺有参考价值的效果图:    前一张为拍照界面,绿色的是拍照按钮。。。第二章为保存的照片,叠加了背景,中间是裁剪出来的,最上面一层是图片,一共三层。实现思路:...

2018-08-25 21:39:48 1642

原创 横着的Gallery,中间放大,两边有间距

具体github地址:https://github.com/ryanlijianchang/Recyclerview-Gallery 具体使用:1.导包implementation 'com.ryan.rv_gallery:rv-gallery:1.1.2'2.布局文件<com.ryan.rv_gallery.GalleryRecyclerView ...

2018-08-13 21:36:45 715

原创 竖着的Gallery,中间放大并压住两边

使用RecyclerView实现画廊效果,中间放大,并且压住两边具体github:https://github.com/Azoft/CarouselLayoutManager使用方法1.添加依赖2.添加布局,使用系统的recyclerview就好(记得导入recyclerview的包)Item3.自定义adapter,一般要用到item点击事件,所以自己提...

2018-08-13 21:11:44 644

原创 自定义View LayoutInfalter解析

什么是LayoutInflaterLayoutInflater是一个用于将xml布局文件加载为View或者ViewGroup对象的工具,我们可以称之为布局加载器用法获取LayoutInflater的三种方法1.LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()2.Layo...

2018-07-18 17:36:52 279

原创 安卓开发 四大组件之内容提供器

内容提供器使数据在不同的程序中实现共享分类:现有的内容提供器,自定义的内容服务器 ContentResolver类对于每个程序来说,如果想要访问内容提供器中的数据,一定要借助ContentResolver类,可以通过Context中的getContentResolver方法得到该类的实例。ContentResolver中提供了一系列的方法用于对数据进行CRUD操作。ContentResolver中...

2018-06-08 21:01:53 1144

原创 安卓开发 四大组件之广播

广播,是一个全局的监听器,属于Android四大组件之一广播的分类:标准广播:一种完全异步执行的广播,再广播发出之后,所有的广播接收器机会都会在同一时刻接收到这条广播消息。因此没有任何先后顺序可言。这种广播的效率会比较高,但是同时也意味着他是无法被截断的。标准广播的工作流程有序广播:一种同步执行的广播,当广播发出后,同一时刻只会有一个广播接收器能收到这条广播,当广播接收器的逻辑执行完后,广播才会继...

2018-06-08 15:44:31 296

原创 安卓四大组件之服务及简单Demo

定义:服务是安卓实现后台运行的解决办法,适合执行那些在后台却要求运行的任务。服务的运行不依赖于任何用户界面,只有当程序进程被杀死的时候,所有依赖于该进程的服务也会停止运行。服务不会开启线程,所有的代码都是默认运行在主线程中。也就是说,我们需要在服务的内部手动创建子线程,并在这里执行具体的任务,否则就会出现主线程被阻塞住的情况服务的生命周期总结:startService后为onCreate(第一次)...

2018-05-30 20:36:27 1180

原创 XML的Pull解析详细实例(Android Studio下)

首先,介绍一下本文背景。是在看第一行代码中的pull解析方式要下新软件,就懒得下,去网上找资料,但是发现很多博客都没有写完一个例子,没想到花了更多的时间。最后找到一篇完整的博客,自己加上一些批注,在这里记录一下Pull步骤简单介绍需要建立一个解析器对象XmlPullParser。再使用XmlPullParser.setInput()方法设置解析器的输入。之后再通过判断事件类型,循环调用next()...

2018-05-27 19:46:21 8119 2

原创 java的多态性个人简单理解

Java中的多态性Java中的多态性指的是父类引用子类的类时,可以调用子类中重写的父类的方法,但是对于子类中特有的方法却没有办法调用。(类比虚构函数和接口,使得用户更加关注父类能做什么,对于子类和接口等,只需要在需要的时候找到合适的就可以)public class DuoTaiDemoInitial { public static void main(String[] args){ ...

2018-05-08 19:24:19 292

原创 java学习日志10.27

1.排序语法:  Arrays.sort(数组名);可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该数组的排序(按升序排列)将数组转换为字符串2.语法:  Arrays.toString(数组名);可以使用 toString( ) 方法将一个数组转换成字符串,该方法按顺序把多个数组元素连接

2017-10-27 14:27:09 128

原创 java学习日志10.24

正确的三种方法如下:1.int[] scores=new int[5]2.int[] scores={71,82,75,98,65}3.int[] scores=new int[]{71,82,75,98,65}

2017-10-24 22:18:44 149

原创 学习日志10.10

1.、 先执行一遍循环操作,然后判断循环条件是否成立、 如果条件成立,继续执行 、,直到循环条件不成立为止2.break跳出的是循环,不是条件判断3.public class HelloWorld{public static void main(String[] args){int num = 999;int count = 0;if(num>=

2017-10-10 19:29:41 149

利用Face++实现人融合效果(请忽略名字)

使用Face++实现人脸融合 只需修改自己的key和secret,并且指定合成文件就可以使用

2018-09-03

自定义Camera实现头像框效果,并裁剪指定区域合成

自定义相机实现简单头像框效果,并裁剪指定区域。 通过自定义参数可以获得多种效果

2018-08-25

空空如也

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

TA关注的人

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