自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (8)
  • 收藏
  • 关注

原创 Android 自定义图片裁剪框功能

Android自定义图片裁剪框功能大体的功能如上gif所示,最后蓝色裁剪框中的矩形图片区域可以进行截取并返回一个Bitmap对象。整个裁剪功能由两个自定义的View组件完成,首先是图片显示控件DragScaleView,主要完成图片的双指触碰缩放和单指触碰滑动,以及根据裁剪框的变化对图片进行对应的平移和缩放;然后就是裁剪框控件DrawBoxView,他俩的父布局是FrameLayout,所...

2019-11-28 21:48:28 3955 8

原创 Flutter旋转平移缩放动画实例 -- 手动实现底部FloatingActionButton弹入弹出动画

这个动画效果在app中很常见,由底部蓝色的FloatingActionButton旋转动画和另外的三个白色按钮的弹入弹出平移缩放动画组成。

2022-08-16 16:13:53 2420 1

原创 Android View的工作流程(三) layout过程

可以看到View的layout方法中会先通过setFrame方法设置mLeft、mTop、mRight、mBottom来确定当前View在父布局中的位置,接着会调用onLayout方法去确定当前View下的子View在当前View中的位置。而mRight和mLeft都是在onLayout方法中确定的,所以在默认的测量方式下,getMeasuredWidth和getWidth的最终取值应该是相等的,只不过getMeasuredWidth赋值于measure的过程中比getWidth赋值要早一些。...

2022-07-18 11:40:20 567

原创 Android View的工作流程(二) measure过程

View的measure过程是由View的measure方法完成的,他是一个被final关键字修饰的方法,我们无法重写该方法,但是measure方法中会调用onMeasure方法来设置计算后的宽高,onMeasure方法是可以被重写的:getDefaultSize方法:可以看到EXACTLY和AT_MOST两种模式下都是以specSize作为返回值,而这个specSize就是View测量后的大小。如果View采用AT_MOST模式即wrap_content来绘制那么结合上一篇文章中的图例: 可以

2022-07-12 12:47:06 844

原创 Android View的工作流程(一) 理解MeasureSpec

MeasureSpec是View的宽高测量规则,它是由View的LayoutParams通过父布局施加的规则转换为对应的MeasureSpec而产生的,然后根据这个MeasureSpec来测量出View的具体宽高MeasureSpec代表一个32位的int值,高2位代表SpecMode(测量模式),低30位代表SpecSize(某种测量模式下View的规格大小),具体可以参考MeasureSpec类的部分源码:通过源码可以看到MeasureSpec将SpecMode和SpecSize打包为了一个int

2022-07-11 11:35:08 479

原创 Kotlin重载操作符和约定声明规则

​ Kotlin中最简单明了的使用约定的例子就是算数运算符。在Java中算数运算符只可以使用在基本数据类型上,+号可以使用在String上。当我们想在BigInteger类上使用+,或者想使用+=添加元素到一个集合中时Java就做不到了。但是Kotlin中就可以做到。1.重载二元算数运算符​ 首先从+开始,实现将两个点的坐标值加起来,使用修饰符定义一个操作符函数定义Point对象,此时可以使用+号​ 也可以把操作符函数定义成扩展函数,而使用扩展函数语法也会是一种通用的定义操作符扩展函数的模板

2022-07-06 11:07:33 867

转载 Android Fragment完全解析

Android Fragment完全解析

2022-06-30 10:51:15 938

原创 Android原生webView概述

1.基本使用 首先要添加网络权限从Android9.0(API 28)开始默认不再支持直接load未加密的url,解决方法是在manifest 中application节点添加android:usesCleartextTraffic="true"加载方式:如果不给webView.webViewClient赋值那么它会在浏览器中打开这个网页,而不是在WebView中打开,如果...

2022-06-14 11:33:12 786

原创 Android原生动效概述

Android原生动效概述

2022-06-08 17:24:52 915

原创 Android图片加载机制

1.Android系统支持4种格式的色彩格式源码在Bitmap.Config中,如下图:.Alpha8:只有一个alpha通道,每个像素占1个字节(Byte).Rgb565:只有RGB3个通道,没有alpha通道,R(红)G(绿)B(蓝) 分量分别使用5位、6位、5位,没有透明度,所以一个像素点占 16 位,也就是 2 字节。.Argb8888:ARGB 分量都是8 位,ARGB 分量都是8 位,所以一个像素点占 32 位,也就是 4 字节,它是最能保证图片效果的一种模式.系统...

2022-05-30 15:41:33 1131

原创 Android手势事件相关

1.MotionEvent和TouchSlop手指触碰屏幕会产生一些事件:MotionEvent.ACTION_DOWN--手指刚触碰到屏幕MotionEvent.ACTION_MOVE--手指在屏幕上移动MotionEvent.ACTION_UP--手指从屏幕上离开的一瞬间TouchSlop代表系统所能识别的最小滑动距离,如果小于这个距离就不认为是滑动操作获取方式:ViewConfiguration.get(getContext()).getScaledTouchSlop();2

2022-05-12 14:50:08 606

原创 kotlin扩展函数

kotlin中有个很好用的功能叫扩展,它的作用是对已有的类额外添加函数和属性并且不需要修改类源码也不需要创建子类。例如:fun Float.getMax(v1: Float): Float { return if (this > v1) this else v1}这是一个以Float类型作为receiver的扩展函数,receiver的定义就是说一个扩展函数需要明确指定哪个类的实例可以调用这个扩展函数,而函数中的this对象会指向函数的调用者即一个未知的Float实例。它的调用

2022-04-19 16:39:23 2574

原创 Kotlin 密封类

在kotlin中被sealed关键字修饰的类就是密封类,当值只能从有限的集合(受限的层次结构)中包含一个类型时,将使用密封类。为了理解这个概念先举个栗子:class Exprclass Const(val value: Int) : Exprclass Sum(val left: Expr, val right: Expr) : Exprfun eval(e: Expr): Int = when (e) { is Const -> e.value

2022-03-29 17:27:38 4214

原创 Kotlin的inline、noinline和crossinline关键字

一、inlineinline翻译成中文的意思就是内联,在kotlin里面inline被用来修饰函数,表明当前函数在编译时是以内嵌的形式进行编译的,从而减少了一层函数调用栈:inline fun fun1() { Log.i("tag", "1")}//调用fun mainFun() { fun1()}//实际编译的代码fun mainFun() { Log.i("tag", "1")}这样写的一点好处就是调用栈会明显变浅:但是这个好处对应用程序

2022-03-22 17:44:25 5315 2

原创 RxJava(1)

一.简介RxJava是ReactiveX的一种Java实现。 ReactiveX是Reactive Extensions的缩写,一般简写为Rx。微软给的定义是,Rx是一个函数库,让开发者可以利用可观察序列和LINQ风格查询操作符来编写异步和基于事件的程序。开发者可以通过Observables表示异步数据流,用LINQ操作符查询异步数据流,用Schedulers参数化异步数据流的并发处理:Rx = Observables + LINQ + Schedulers对于异步操作,我们会想到Android的A

2022-02-11 17:49:43 1067

原创 ViewPager2高度无法跟随fragment自适应问题

背景:ViewPager2下不同的tab会对应各自的fragment,往往这些fragment的高度是不同的,然而在允许预加载的条件下ViewPager2的高度会始终跟随最高的那个fragment的高度,这就会导致其他不够高的fragment出现留白的问题。即便禁止了预加载,只要点击tab加载了比当前fragment更高的另一个fragment那么viewPager的高度也会随着改变,就仍然会导致上一个fragment出现大量留白的问题。如下所示:思考:首先我们想要的效果是viewPager的高度.

2022-02-08 16:31:00 7040 8

原创 Kotlin协变和逆变

首先声明三个类:open class Person(val name: String, val age: Int) {}class Man(val n: String, val a: Int, val male: String = "man"): Person(n, a) {}class Woman(val n: String, val a: Int, val female: String = "woman"): Person(n, a) {}Man和Woman都是Person

2022-01-25 14:26:32 3304

原创 Kotlin 委托

委托:一种设计模式,一种能够替代继承的方式。操作对象自己不去处理某段逻辑而是委托给另一个对象去处理。一.类委托将一个子类的具体实现委托给另一个子类去完成。这句话的意思就是说一个子类必须实现的接口属性、方法可以交给另一个已经实现了该接口的子类去完成。实现一个List接口:class MyList<T>: List<T> { override val size: Int get() = TODO("Not yet implemented")

2022-01-19 15:24:51 2199

原创 Kotlin泛型-类型擦除、泛型实化

Kotlin泛型-类型擦除、reified关键字

2022-01-12 11:31:01 2874

原创 Kotlin协程

一.协程的基本用法kotlin没有把协程纳入标准库中,需要单独导入协程的依赖包:implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'开启一个协程最简单的方式:GlobalScope.launch { println("The first coroutin

2022-01-06 15:31:02 2324

原创 关于APP冷启动时最开始的白屏以及处理方式

关于APP冷启动时最开始的白屏以及处理方式一.冷启动与热启动通常情况下app的启动方式包括冷启动和热启动,当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动,如果后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台),这种启动会从已有的进程中来启动应用,这个方式叫热启动。而二者不同的地方就...

2019-07-04 10:01:50 351

原创 Ionic4框架下视频Videogular2的使用

Ionic4框架下视频Videogular2的使用videogular2 API链接1.首先要安装Videogular2的依赖npm install videogular2 --savenpm install @types/core-js --save-dev2.在你要使用video控件的页面的module.ts文件中引入videogular2的插件import {NgM...

2019-06-27 10:47:59 2347

原创 Kotlin(7)Activity

kotlin(七)Activity一.基本使用先对比kotlin和java中跳转到另一个activity的基本代码:java:Intent i = new Intent(OneActivity.this, TwoActivity.class);startActivity(i);kotlin:val i = new Intent(this@OneActivity, TwoAc...

2019-06-12 14:48:51 805

原创 Kotlin(6)简单Android控件

Kotlin(六)简单Android控件的使用kotlin中控件对象的获取将不再需要类似于findViewById这样的方法来获取,直接使用布局文件中的id就可以获取到对应的控件对象一.按钮1.Button关于按钮的使用需要注意的还是它的三种点击响应的写法以及在匿名函数的方式下视图对象没有使用时的最简形式:匿名函数的形式btn.setOnClickListener{ ...

2019-06-11 09:47:26 733

原创 Kotlin(5)类与对象

Kotlin(五)类与对象一.类的构造1.类的简单定义先对比一下kotlin和java中普通类的写法:public class A extends B { public A() { }}class A : B() { init { }}构造实例:var b = B()相比较之下可以看出:ko...

2019-06-06 17:34:10 308

原创 Kotlin(4)方法

Kotlin(四)方法的使用一.方法的基本用法1.声明这里用onCreate方法为例来比较java和kotlin在声明方法时的不一样java:@overridepublic void onCreate(Bundle savedInstanceState) { ...}kotlin:override fun onCreate(savedInstanceState...

2019-06-05 14:15:13 258

原创 Kotlin(3)控制逻辑

Kotlin(三)控制逻辑语句一.条件分支1.if...else...kotlin中if-else的用法和java没什么区别,这里就不再贴代码了。值得一说的是,kotlin中用if-else取代了java的三元运算:var str = if (istrue == true) "真" else "假"//if-else自带返回值2.多路分支kotlin中将java的多路分支s...

2019-06-04 16:50:38 189

原创 Kotlin(2)数据类型

Kotlin(二)数据类型一.基本数据类型基本数据类型对照 基本数据类型名称 kotlin java 整型 Int int、Integer 长整型 Long long、Long 浮点型 Float float、Float 双精度 Double double、Double 布尔型 Boolean b...

2019-06-04 10:45:27 634

原创 Kotlin(1)基础的一些介绍和配置

Kotlin(一)基础介绍和配置一.kotlin介绍这些年Android系统一直占据着移动设备系统市场的主导地位,不论是从嵌入式设备的开发还是软件APP的开发大多数都是以Android系统为基础,开发的语言也是以java为主流,C/C++更多是面向嵌入式的方向。然后h5那边兴起的前端三大框架:react、vue、angular使移动开发和前端web开发接轨,本人只搞过ionic开发移动端,...

2019-06-03 18:33:47 192

原创 Spannable

Spannable和SpannableStringBuilder 1.和String的关系 这三个玩意都是用来存储字符串的,但和String不同的是前面那两兄弟有一个 setSpan()方法,这个方法可以给存储的字符串添加各种样式,而String不行 2.SpannableString和SpannableStringBuilder...

2019-06-03 16:51:58 358

原创 Android广播Broadcast基础理解概述

Android广播基础理解广播可以分为系统广播和自定义广播,系统广播就是手机系统根据自身状态信息发出相应的广播,比如电池电量不足10%、手机完成开机、手机所在地理位置发生了变化(从安徽跑到了江苏)等,这些情况下系统都会发出一条广播,应用程序可以选择接收或者不接收。一.广播的动态和静态注册1.动态注册即不在AndroidManifest.xml文件中声明广播接收者,而是在需要接收某广...

2019-05-07 18:40:45 211

原创 微信小程序开发ts脚本的setData方法使用问题

微信小程序开发ts脚本的setData方法使用问题关于微信小程序的开发,它的官网只给出了js语言使用的API文档,对于ts脚本的开发没有官方的说明,在写起来会有不少的坑,这里就说一个setData方法的坑如果按照js文档中的写法:this.setData({ xxx:"XXX"})在js中是没有问题的,但在ts中就会抛出setData方法‘undefined’的异常,...

2019-04-16 16:59:35 3477 2

原创 关于android原生AlertDialog列表item样式修改问题

AlertDialog条目列表的样式修改问题刚刚在写一个简单的弹出框时遇到了一个问题,这个弹出框没有标题、没有确定取消按钮,只有一个条目列表,就相当于是视频切换清晰度时弹出的那种选择弹出框。按照最基本的那种写法会发现它提供的默认样式会非常难看,却一时又不知道怎么改,一般写法:final String[] items = {"标 清", "高 清", "超 清"};AlertDialog...

2019-03-21 16:49:16 1773

原创 关于MPChart图例过多而无法全部显示的问题

关于Android图表MPChart库的图例过多无法全部显示的问题当时自己在用MPChart库做项目的时候遇到的这样一个问题,饼状图的图例实在太多,MPChart所提供的功能无法显示全部的图例(最多也就十几个),柱状图和线图图例不是很多,就是这个饼图的需求有些不一样。然后就在MPChart库里面一直找有没有能动态显示图例的方法,然后就gg了,找半天也没有。最后还是自己写一个吧。具体代码:...

2019-03-11 17:52:52 1740

原创 Maven的一些基础知识和修改镜像也无法下载jar包的问题

一.简介Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的...

2019-03-01 16:34:01 797

原创 android原生数字锁绘制

android原生数字锁这个东西最主要的部分是数字键盘的绘制,需要在指定位置绘出0-9数字以及重置按钮和删除按钮,并在对应位置添加相应的点击响应事件,下面来看一下这个类的编写,它继承自view类:private int screen_width = 0;// 屏幕的宽度private float first_x = 0;// 绘制1的x坐标private float first_y ...

2019-02-26 09:12:02 243

原创 基于百度人脸API的Android人脸识别组件

首先,我们提出几个关键词:百度人脸API、人脸图像连续采集、注册人脸库、图像编码、face_token、人脸检测接口、人脸对比接口需要先注入两个库: implementation 'com.google.code.gson:gson:2.8.0' implementation 'com.github.zcolin:ZFrame:2.0.1'1.百度人脸API创建应用登录百度人脸...

2019-01-21 17:01:42 1373 2

基于百度人脸API的人脸识别组件

纯手lu代码,基于百度人脸API的人脸识别组件,必须录入之后才可完成身份验证功能。

2019-01-21

android数字密码锁numberLock控件

纯手撸控件,包含了一般情况下的数字锁功能和一些UI属性的自定义功能,能够满足一般app的安全锁开发

2018-12-14

android手势图案锁gestureLock控件

完善的github上别人写的手势锁控件,增加了一些常规功能以及一些UI属性的自定义功能,完全能够满足一般app的安全锁开发

2018-12-14

android图表雷达图控件使用实例

android图标库下雷达图控件的使用实例,github上的大神写的

2018-12-10

BadgeView开源jar包

下载后解压就可以使用

2018-09-19

JavaWeb学习笔记

html+css+js+xml,最好用EditPlus打开

2017-07-24

五子棋游戏

基于java的五子棋游戏

2017-07-16

文件管理系统

一个基于java的文件管理系统,可进行显示、创建、删除、读写等功能

2017-07-16

空空如也

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

TA关注的人

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