自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shu_lance的博客

一只热爱世界的程序猿...

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android——View的工作原理

前言要想实现自定义View,那么需掌握View的事件体系及其底层工作原理,本节主要围绕View的工作原理来开展,View的事件体系可见另一篇文章。View的底层工作原理主要涉及到三个流程:View的测量(measure)、View的布局(layout)、View的绘制(draw)。除了这三大基本流程外,有几个View的回调方法也需掌握,如:构造方法、onAttach、onVisibilityChanged、onDetach等等。自定义View的实现,主要有几种固定类型,有的继承View或者ViewGr

2021-05-07 12:21:10 241 2

原创 Android——View的事件体系

1. View的基础知识View的基础知识主要有:View的位置参数、MotionEvent、TouchSlop对象、VelocityTracker、GestureDelector和Scroller对象等等。1.1 什么是ViewView是Android中所有控件的基类,View可以是单个控件,也可以是多个控件组装起来的一组控件。1.2 View的位置参数View的位置由它的四个顶点来决定,分别对应于View的四个属性:top、left、right、bottom,这些属性都是相对于父容器来说的,所

2021-05-04 18:06:44 654 8

原创 Android-Window和WindowManager

1. 前言Window是一个抽象类,它的具体实现是PhoneWindow,WindowManager是外界访问Window的入口,Window的具体实现位于WindowManagerService中,WindowManagerService和WindowManager的交互是一个IPC的过程。Window实际是View的管理者。2. Window和WindowManager的使用WindowManager.LayoutParams中的flags与type是两个重要的参数。2.2 flags参数表示

2021-05-01 13:16:19 320

原创 Java-浅拷贝与深拷贝

一、引言对象的拷贝即将一个对象的属性拷贝到另一个相同类型的对象中去。应用的场景大多数在一个新的上下文环境中需要复用被拷贝对象的部分或者全部数据。在Java中拷贝的方式有三:浅拷贝、深拷贝、延迟拷贝。二、浅拷贝2.1 什么是浅拷贝浅拷贝是按位拷贝对象,会创建一个对象,其有这原始对象的精确拷贝。如果属性是基本类型,那么拷贝的就是基本类型的值;如果属性是内存地址,那么拷贝的就是内存地址,如果其中一个改变了该地址,那么就会影响到另一个。2.2 浅拷贝代码实现2.2.1 创建浅拷贝对象public c

2021-04-28 20:50:40 177 1

原创 Java Concurrent --- Thread & Thread Pool

ThreadWays to create Threadsextends Threadimplements Runnableimplements Callable and use FutureTaskThread Pool Knowledge PointsCore ParametercorePoolSizemaximumPoolSizekeepAliveTimeTimeUnitBlockingQueueThreadFactoryRejectedExecutionHandler

2021-04-09 11:08:57 62

原创 Kotlin学习6—神奇的协程

前言在Kotlin中,有个非常特色的一项技术,那就是协程什么是协程呢?协程与线程是有点类似的,可以简单地认为协程就是一种轻量级的线程在平常开发的时候,线程是最小的执行单位,都知道线程是非常重量级的,需要依靠操作系统的调度才能实现不同线程之间的切换但是协程不同于线程的一点在于,协程可以仅在编程语言的层面上就可以实现不同协程之间的切换,从而大大提高了并发编程的运行效率协程允许在单线程模式下模拟多线程编程的效果,代码执行时的挂起与恢复完全是由编程语言来控制的,与操作系统无关基本用法由于Kotlin并

2020-10-05 18:40:32 279

原创 Kotlin学习5—泛型

前言什么是泛型?在我们一般的编程模式下,我们需要给任何一个变量指定一个具体的数据类型,而泛型允许我们不指定具体类型的情况下进行编程,这样会具有更好的扩展性泛型的基本用法泛型主要有两种定义方式:定义泛型类,及定义泛型方法,使用的语法结构都是,括号中的字母使用任何字母都可以的,T只是常规写法在Kotlin中,还拥有非常出色的类型推导机制,假设我们传入一个Int类型的参数,Kotlin能够自动推导出泛型的类型就是Int型object BaseGeneric { @JvmStatic f

2020-09-29 11:34:34 208

原创 Kotlin学习4—委托与lazy函数

前言委托是一种设计模式,基本理念是:操作对象自己不会去处理某段逻辑,而是会把工作委托给另外一个辅助对象去处理简单的委托模式的例子如下,实现Set接口,实现一个自己的实现类,里面借助HashSet这个辅助对象来实现,如下代码: class MySet<T>(val helpSet: Set<T>) : Set<T> { override val size: Int get() = helpSet.size

2020-09-24 16:13:16 1039

原创 Kotlin学习3—面向对象编程

1. 继承与构造函数1.1 继承 :在Kotlin中,任何一个非抽象类默认都是不可以被继承的,相当于JAVA中给类声明了final关键字抽象类本身无法创建实例,一定要由子类去继承它才能创建实例,因此抽象类必须可以被继承才行之所以这么设计,应该是与var关键字差不多,最好都是不可变的,因为一个类允许被继承的话,无法预知子类会存在什么风险在Effective JAVA一书中提到,如果一个类不是专门为继承而设计,就一个为这个类加上final声明若要使一个类可以被继承,只需在该类前加上open关键字即可

2020-09-23 18:02:18 164

原创 Kotlin学习2—函数的使用

1. 普通函数 // 无返回值 fun print(msg: String) { println(msg) } // 正常写法,有返回值 fun sum(num1: Int = 0, num2: Int = 0): Int { return num1 + num2 } // 当只有一行代码的时候,可以省略函数体部分 fun sum(num1: Int = 0, num2:

2020-09-22 11:25:24 205

原创 Kotlin学习1—基础语法

1. 变量定义1.1 变量与常量 // 变量,用var修饰 var str1: String? = null // 常量,用val修饰 val str2: String? = null2. 逻辑控制2.1 判断语句2.1.1 if 语句使用 // if 判断语句与JAVA一致,常规写法 fun ifTest(a: A) { // is 关键字作用等于 JAVA中的 instance if (a is A) {

2020-09-21 19:29:37 592

原创 解决项目合并库冲突

Q: 两个aar包包名相同,版本号不同A:将两个aar包放至统一的一个文件夹内,由统一路径依赖(参考https://juejin.im/entry/5c079f89e51d451dae3bd321)Q:两个不同aar共用一个相同的jar包(可能版本号不同)A:高版本兼容低版本(定制除外),删除低版本的jar,打aar包方式: jar cvf xxx.aar -C xxx/ .Q:遇到Error while generating the main dex list.A:./gradlew ass

2020-08-20 20:46:10 342

原创 Android消息机制好帮手—Looper、MessageQueue、Handler、Message

基础常识1、 Android 中只有主线程才能更新UI,Android机制的规定,主要是为了保证UI绘制的流畅,防止并发出问题;2、 Android 中主线程不允许阻塞超过5s,否则可能会ANR;3、 Handler机制的核心就是实现线程之间通信;如何涉及一套线程间通信的机制?Q1:如何涉及线程间通信?A1:利用面向对象这个概念,创建一个对象obj,然后在子线程中给obj的一个属性赋值,然后在主线程中,操作obj对象,就可以拿到子线程赋值的结果,完成一次线程通信;Q2:主线程什么时候去操

2020-08-20 19:55:40 189

原创 图片加载框架ImageLoader实现原理

图片加载框架ImageLoader实现原理声明:本篇文章已授权微信公众号guolin_blog(郭霖)独家发布。前序:在制作App的时候,会经常需要加载一些网络图片,在图片加载框架出来之前,我们都是通过 网络拉取 的方式去服务器端获取到图片的文件流后,再通过BitmapFactory.decodeStream(InputStream in)来加载图片,这种方式加载一两张图片倒不会出现问题,...

2018-11-29 10:18:38 1262 2

原创 Activity知识点

Activity的知识点主要有:生命周期(正常与异常);启动模式(Launcher Mode);隐式启动(IntentFilter与action、category、data);一、Activity的生命周期:1. 正常的生命周期(七个方法):先附上正常的生命周期流程:正常情况下,一个Activity所经历的生命周期是:onCreate()-&gt;onSt...

2018-04-15 00:21:55 453

原创 最小生成树——Kurskal算法

背景: 最近精神上受到打击,时常怀疑人生,怀疑人生的时候,就时常写写算法冷静,今天给小伙伴们介绍图的最小生成树的算法之——Kurskal算法; … 由于小猿的文采不咋滴,就不长篇大作了,所有故事都在代码里:package ALG;import java.util.ArrayList;import java.util.HashMap;import java.util...

2018-04-12 15:47:41 1652

原创 ListView 与 RecyclerView 简单对比

RecyclerView 与 ListView 的主要区别:布局效果对比常用功能与API对比在Android L引入嵌套滚动机制(NestedScrolling)ListView与RecyclerView的简单使用:ListView: 1. 继承重写BaseAdapter类; 2. 自定义ViewHolder与convertView的优化(判断是否为null);Re...

2018-03-15 12:23:35 20533 3

原创 利用JavaCV实现将视频以帧方式抽取

使用前: 在用JavaCV实现以帧方式抽取视频的前, 我们需要先从bytedeco/javacv下载第三方的压缩包, 解压后按自己的需求往自己的IDE ( * IDEA / Eclipse * ) 导入解压缩包下JAR文件;接下来就以代码方式来说明如何利用Javacv来将视频以帧的方式抽取出来:import org.bytedeco.javacv.FFmpegFrameGrab...

2018-03-01 12:01:26 6975 3

原创 初识React Native(二)—实现Android上的原生模块(一)

背景(实现的原因):有时候我们的项目需要:访问Android平台上的API时, 但是我们的React Native可能还没有相应的模块包装; 再或者我们需要复用一些Java代码的时候, 而不是用JavaScript重新实现时; 又或者我们需要实现一些高性能的, 多线程的(因为JavaScript只跑在一个线程上)的代码, 譬如: 操作数据库, 加载图片等等的时候;这时

2018-02-02 19:29:11 248

原创 初识React Native(一)—集成到原生Android项目

1.创建Android工程2.Android工程创建完成后,在Android studio左下角打开Terminal窗口,输入: npm init 命令(该命令是来生成package.json文件的,改文件即React Native的配置文件,当我们输入该命令后回车,会提示我们输入一些基本的信息,选择填写即可),如图:3.然后执行命令: npm install –save re

2018-01-29 19:32:24 706

原创 Google InnoCamp 2017 夏令营——万物互联,共享未来

公元2017年8月,在火辣辣的季节里,小猿很幸运地被选中去杭州参加Google InnoCamp 2017夏令营;杭州虽然拥有着“上有天堂,下有苏杭”的美称,但八月的杭州真的热得跟大火炉似的,不过,由于小猿作为Google的粉丝,这么热的季节也阻止不了小猿去参加Google承办的夏令营…这个故事的开始要回溯到公元2017年6月,当时小猿正在改着bug,突然间,小猿的Gmail收到了一份Google的

2017-12-12 22:30:23 1900

原创 ClockView——简单的Android时钟控件

ClockView —— 简单的Android时钟控件GitHub地址:https://github.com/LanceShu/ClockView使用前:先在项目中的build.gradle中添加maven:allprojects { repositories { maven { url 'https://jitpack.io' } }}然后在app的build.gr

2017-11-14 22:33:40 4164

原创 HTTP小常识

HTTP简介:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,适用于从万维网服务器传输超文本到本地浏览器的传送协议;HTTP是一个基于TCP/IP协议来传递数据(HTML文件、图片、查询结果等);HTTP工作原理:HTTP协议工作于C/S架构(客户端-服务器)为上,浏览器作为HTTP客户端通过URL向HTTP服务器即WEB服务器发送所有请求;

2017-11-12 20:56:03 227

原创 JVM垃圾收集器与内存分配策略

概述问:垃圾收集器(GC)需要完成的三件事情:答:1. 哪些内存需要回收? 2. 什么时候回收? 3. 如何回收?问:为什么我们还要去了解GC和内存分配呢?答:当需要排查各种内存溢出、内存泄露等问题时,当垃圾收集器成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节;对象已死吗在堆里面存放的几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是确定这些对象中

2017-09-03 00:25:53 281

原创 Kotlin实战——LacWeather

简介该APP是基于Kotlin语言以及借鉴《Android第一行代码》中的酷欧天气进行编写的,这也算是小猿学习Kotlin的时候,写的第一款Kotlin小demo。 主要功能我的城市:用户收藏的城市(正在实现中…)以及用户当前所在的城市的天气信息;查询城市:用户可以查询全国各地的城市的天气信息; 技术实现LitePal:利用LitePal数据库来存储城市的省市县信息,实现简单的插入与查询;

2017-09-01 15:19:32 343

转载 PopupWindow的简单使用(结合RecyclerView)

Android弹窗:在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利。关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindow;两者的区别:AlertDialog弹窗在位置显示上是固定的,而PopupWindow则相对比较随意,能够在主屏幕上的任意位置显示; 今天就简单介绍一下,如何利用PopupWindow实现Recyc

2017-07-28 16:04:08 15548 4

翻译 AndroidUI 卡片式折叠交互效果——CardStackView

最近小猿在改进之前写过的学校教务系统APP的UI界面的时候,发现了一个有趣的Android UI——卡片式折叠交互CardStackView,该View是在GitHub上找到的,但是该View的主人没有告诉我如何使用,小猿研究了半天,在此,将其简单的使用步骤阐述一下:CardViewStack的GitHub地址:https://github.com/loopeer/CardStackView 先

2017-07-17 11:08:13 11369 7

转载 Android自定义View之圆形图片--RoundImageView

最近,和几个朋友一起准备做一个关于交易平台的一个项目;在准备之前,我们的UI设计师给我们设计了一个登录界面,这个登录界面最难之处就是要用户的头像需要圆形的,但Android的组件中并没有现成的View,所以我就去看看了其他大牛们的blog,都是通过自定义View来实现的,所以我就开始边看边学习了一下。在自定义View之前,需要使用onMeasure()方法测量图片的宽度widthMeasureSpe

2017-03-25 20:07:04 775

原创 Servlet的使用---Tomcat与Eclipse的配置

今天小shu给大家介绍一下有关Servlet的使用,做任何事之前都是需要做一些准备的,首先就给大家讲一下如何搭建一个JavaWeb服务器,我们这次要用到的工具是Tomcat与Eclipse(Java EE版);一.使用前必备物品: 1.JDK的安装与环境变量的配置; (我的JDK安装在了C:\Program Files\Java\jdk1.8.0_92上) JDK的下载可以到oracl

2017-03-04 20:23:18 272

原创 Android之ViewPager+RadioGroup

今天,跟大家介绍一下如何在Android中实现类似微信那样的底部的导航栏;实现这样的效果主要用到两个控件ViewPager与RadioGroup; 不多说,让我们一起看看代码是怎样实现的吧: 首先,我们要创建一个简单的线性布局,在里面放TextView+ViewPager+RadioGroup 然后在MainActivity中实例化各个控件,该MainActivity继承的是ActionB

2017-03-01 21:15:44 563

原创 Android Studio使用之小插件

一、前言: 今天,在实验室敲代码的时候,忘了带数据线,然后在Android Studio面前敲完代码,一脸懵逼地坐在电脑面前思考咋把apk安装在手机上,原本想通过QQ来安装的,但想想有点麻烦,就在网上找到了个Android WiFi ADB的方法。二、使用前: 1.在https://plugins.jetbrains.com/idea/plugin/7983-android-wifi-adb上下

2017-02-28 23:15:11 378

转载 马踏棋盘-----Java版

关于马踏棋盘的思路,大致算法如下: 1.贪心算法(找最少的出路,因为最少的出路往往不用进行多次选择,贪 心算法的主要理念是:最拿走的路是最好的路); 2.深度搜索:主要的算法是深入进去探索,但执行时间有点长,效率有点低,但搜索面比较广泛; 3.回溯:当搜索到该点没有出路时,就退回到上一个点的位置; 4.递归:马踏棋盘主要用到是递归的方法,递归循环;闲话不多说,来看看代码吧。。。。。packa

2016-10-11 09:39:07 832 1

原创 Java计算器--CALance

之前用过C语言的图形界面写了一个电脑版的计算器,但效果并不是很好;因此这次花了接近一周的时间,利用Java语言写了一个Android计算器APP–CALance,不仅写了手机端的(Meizu),同时还写了手表端的(ticwatch);其实计算器的原理都是一样的,主要的原理是: 1.利用数据结构中的四则运算,中缀专后缀,后缀再计算结果; 2.Java上面,我是利用了List中的ArrayList来

2016-08-06 00:13:45 607

原创 二叉树的遍历

二叉树,顾名思义就是一棵根节点最多只有两个子节点(即左孩子与右孩子);今天主要讲的是二叉树的遍历,二叉树的遍历主要按次序遍历分为:前序遍历、中序遍历、后序遍历与层序遍历;如图: 首先,在此先声明一下,这四种二叉树的遍历都是利用了函数的递归方法来进行遍历的;我觉得前三种的遍历方式都是按照判断左右孩子是否存在、根节点打印输出时的位置来进行遍历的;前序遍历: 遍历顺序是按照:先打印根节点->判断左

2016-07-22 00:05:01 395

原创 #利用C语言-EasyX图形设计-制作简易计算器#

花了大概一周的时间,今天终于完成了简易版的计算器的制作,不过这计算器只能实现一些简单的加减乘除,不能进行复杂的运算,有兴趣的小伙伴们可以在这基础上进行添加修改,一起努力,一起进步!!#include "graphics.h"#include "windows.h"#include "conio.h"#include "stdio.h"#include "string.h"#include

2016-06-02 23:11:56 11397 16

原创 #奇葩论--在C语言中利用函数递归创建链表#

在C语言的世界中,大家应该都懂得如何利用循环判断来创建一个链表;但今天,我将向大家介绍一种新的创建链表的方法–利用函数递归的方法来创建链表。 利用函数递归来解决的问题,我们最熟悉的就是解决Fibonacci数列; 程序如图: 接下来,就向大家介绍利用函数递归来创建链表。。 首先,我们先来看看源程序: 首先,我们写了一个结构体,用来存放数据data,并指向下一个结点的; 然

2016-05-05 23:53:38 1102

原创 #奇葩论--关于C语言中的仅用"[]"运算符实现加法运算

奇葩论--关于C语言中的仅用"[]"运算符实现加法运算在C语言世界中,大家对这个“[]”运算符并不陌生,因为我们经常在使用数组时需要用到它,但今天我向大家介绍的并不是它普通地在数组中的使用,而是它还能进行像’+’运算符那样进行加法运算。好了,说了那么久,我们先来看看它’[]’在数组中的使用吧~~~ 很显然,只要学过C语言的小伙伴们都能知道该’[]’运算符在数组中的作用。 我们如果要想知

2016-04-29 21:51:58 850

okhttp与okio的jar

里面含有最新的okhttp与okio的jar包,方便大家进行网络请求!

2018-06-13

空空如也

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

TA关注的人

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