自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 RecyclerView实现无限数据循环效果:JFPicker的迭代思路

RecyclerView实现无限数据循环效果:JFPicker的迭代思路

2023-03-15 21:32:58 1579

原创 kotlin 语法进阶 - kotlin实现DSL与实战

kotlin实现DSL与实战

2023-01-07 20:20:32 1114 2

原创 kotlin 语法进阶 - 内联函数inline 、noinline 、crossinline的作用

kotlin内联函数inline、noinline、crossinline的作用

2023-01-07 20:02:22 435

原创 kotlin 语法进阶 - 作用域函数与应用场景

kotlin 作用域函数与应用场景

2022-12-29 16:45:16 613

原创 Github开源库Xpopup代码阅读

github开源库Xpopup代码阅读

2022-11-30 20:17:29 2817

原创 kotlin语法进阶 - 协程(二)挂起函数原理

最简单的挂起函数原理解析

2022-08-16 20:03:35 973

原创 kotlin语法进阶 - 协程(一)协程基础

kotlin协程基础

2022-08-08 20:08:08 3799

原创 Kotlin基础语法 十六、委托

kotlin 委托详解

2022-07-20 19:36:36 798

原创 Android 滚轮选择器JFPicker,推荐自己的一个开源库

Android 滚轮选择器

2022-06-15 19:30:27 2173 1

原创 Kotlin基础语法 十五、扩展

Kotlin 能够扩展一个类的新功能而无需继承该类或者使用像装饰器这样的设计模式。 这是通过叫做 扩展 的特殊声明完成。例如,当你遇到一个不能修改的、来自第三方库中的类,而你又想在不改变这个类的情况下使用极低的成本去扩展这个类的功能,此时你就需要用到扩展,你可以使用扩展为这个类增加函数、增加属性,增加的函数属性就像这个类本来拥有的一样,可以普通的调用。扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。1.扩展函数扩展函数可以在已有类中添加新的方法,不会对原类做修改。声明一个扩展函数,我们需

2022-04-29 19:49:02 244

原创 Kotlin基础语法 十四 、数据类与密封类

数据类平时的Android开发中,为了解析后台人员给我们提供的接口返回的Json字符串,我们会根据这个字符串去创建一个类或者实例对象,在这个类中,只包含了一些我们需要的数据,以及为了处理这些数据而所编写的方法。这样的类,在Kotlin中就被称为数据类。数据类的声明:使用data关键字声明数据类:声明格式data class 类名(val/var param1 :数据类型,…){}说明:)使用data关键字声明数据类,必须写在class关键字之前。)没有类体大括号{}可省略。)构造函数中

2022-04-12 19:51:19 2345

原创 Kotlin基础语法 十三、lamdba表达式解析四(语法篇)

一、Lambda表达式语法回顾上一篇,我们在某个地方需要运行一个函数,我们只知道这个函数的参数类型和返回值类型(参数类型加返回值类型构成了 kotlin一种特殊的数据类型:函数类型),但函数具体执行什么操作我们并不关心,所以我们动态的传递一个满足参数类型和返回值类型条件的函数,但只有对象才能作为参数传递,所以我们通过双冒号或匿名函数 来实现一个函数类型的对象,但这两种方式代码比较繁琐,为了简化代码量,使代码简洁明了,我们引入了Lambda表达式,所以Lambda表达式的本质其实是函数类型的对象,我们真正的

2022-04-01 19:40:40 2631

原创 Kotlin基础语法 十二、lamdba表达式解析三(函数类型)

前言因为在kotlin的官网中,对lamdba的介绍篇幅有限而且没有逻辑, 所以在我最初开始接触kotlin的时候,我对kotlin的lamdba表达式有非常多的困惑,为此我花了接近一天的时间,浏览了网上几十篇的文章,才慢慢总结整理了kotlin的lamdba表达式知识点,其中关于 函数类型 讲的最清楚直白的应该是 扔物线 大神的一篇文章:【码上开学】Kotlin 的高阶函数、匿名函数和 Lambda 表达式建议对 Lambda 表达式函数类型迷茫的同学去看一下这篇文章,你会感到豁然开朗。本篇文章只

2022-03-29 20:31:54 2568

原创 Android事件传递机制:dispatchTouchEvent源码解析附具体示例

**注意:因为是解析源码,所以本文要求对Android的事件传递机制有一定的的了解。**当然我也会简单的对事件传递的知识进行提要:一、 简单提要同一个事件序列:指的是从手指接触屏幕的那一刻起,到手指离开屏幕的那一刻结束,在这个过程中所产生的一系列事件,这个事件以down事件开始,中间含有数量不定的move事件,最终以up事件结束。点击事件的事件分发,就是对同一事件序列的分发,这个过程由三个很重要的方法来完成:dispatchTouchEvent,onInterceptTouchEvent,onTou

2022-03-27 14:05:37 5808

原创 Kotlin基础语法 十一、lamdba表达式解析二(对象表达式)

有时候,我们需要创建一个对某个类做了轻微改动的类的对象,而不用为之显式声明新的子类。 Kotlin 用对象表达式和对象声明处理这种情况。1.对象表达式主要用来创建匿名内部类的对象我们回顾一下匿名内部类的特点:)匿名内部类是没有名字的类)匿名内部类 我们一般只想在局部使用一次,为此我们并不愿意重新定义一个新的类。)匿名内部类一定是继承了某个父类,或是实现了某个接口,来完成局部代码需要的功能)运行时将该匿名内部类当做它所实现的接口或是所继承的父类看待。)匿名内部类简化了代码结构和代码量,这是因

2022-03-25 20:18:36 1567

原创 Kotlin基础语法 十一、lamdba表达式解析一(匿名内部类)

一、嵌套类**嵌套类,即指一个类可以嵌套在其他类中。**简单的说就是在一个类里又声明了一个类。示例:class Out{ // 外部类 val outNumber = 1 class In { // 嵌套类 val inNumber = 2 fun init(){ println("执行了嵌套类的init方法") } }})调用嵌套类的属性或方法的格式为:外部类.嵌

2022-03-25 19:57:30 1645

原创 Kotlin基础语法 十、接口与抽象类

一. 接口1、 ) 接口的定义) 使用关键字 interface 来定义接口)Kotlin 接口的方式可以是抽象的,也可以提供默认的实现(即方法体是可选的))Kotlin接口的属性必须声明为抽象(不能初始化)或提供访问器实现。并且在接口中声明的属性不能有幕后字段(backing field),因此接口中声明的访问器不能引用field,var声明的可变变量的访问器依赖幕后字段。所以var属性只能是抽象的,val 属性 可以提供getter访问器完整示例:interface MyInterfac

2022-03-23 20:28:45 1594

原创 Kotlin基础语法 九、类的继承

1.超类(Any)在Kotlin中,所有的类都继承于Any类,如果没有显示声明父类就默认继承自Any。class Person // Person默认继承自AnyAny这个类给我们提供了equals()、hashCode()、toString()这三个方法,如下:public open class Any { public open operator fun equals(other: Any?): Boolean public open fun hashCode(): I

2022-03-22 19:31:28 1656

原创 Kotlin基础语法 八、类的属性

一、声明属性)Kotlin 类中的属性同变量一样既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为不可变的。如下:open class Person { val hello = "hello,everyone!" var userName = "jf" var userAge = 26})类的对象调用一个属性,使用.操作符加属性名称即可。val person = Person()person.userName)类的属性默认是public

2022-03-21 19:19:27 2890

原创 Kotlin基础语法 七、类与构造函数

一、类的声明和Java一样,Kotlin 中使用关键字 class 声明类。类声明由可见性修饰符、类名、类头(指定其类型参数、主构造函数等)以及由花括号包围的类体构成。类头与类体都是可选的; 如果一个类没有类体,可以省略花括号。一个相对完整的类声明格式如下:可见性修饰符 class 类名 constructor(参数列表){类体}类的可见性修饰符默认为public,可省略具体示例看构造函数部分二、类的构造函数解析:)在Kotlin中,允许有一个主构造函数和多个次构造函数(也叫辅助构造

2022-03-18 20:50:33 1682 2

原创 Kotlin基础语法 六、函数

1.函数的声明Kotlin 中函数使用 fun 关键字声明定义格式为:可见性修饰符 fun 函数名(参数1 :类型,参数2 :类型,…) : 返回值类型{…函数体}示例:fun double(x: Int): Int {return 2 * x}注意:)在没有显示声明可见性修饰符的时候,Kotlin中默认为public,b并且public可省略)()圆括号必须存在,即使是没有参数的情况下){}大括号必须存在,即使是没有函数体的时候,不过在Kotlin中有一个特例就是,函数具备返回

2022-03-17 19:07:32 1404

原创 Kotlin基础语法 五、可空变量的null处理

kotlin变量分为可空变量和不可空变量。如果我们定义一个可空变量,在使用的时候,需要判断该段该变量是否为空,如果定义一个不可空的量时,则判断将毫无意义,因为这个变量永远不会为空。koltlin变量空值处理方式:方式一、使用传统的 if…else… 条件语句判断示例:val l = if (b != null) b.length else -1方式二、使用安全调用操作符 ?. 判断用法为:可空变量?.属性/方法。如果可空类型变量为null时,返回null这种用法大量用于链式调用中,能有效避免空

2022-03-16 19:46:37 1763

原创 Kotlin基础语法 四、控制语句

一、If 条件语句Kotlin 和Java 的if有一定的区别1、)传统的If else 用法和java一样示例:val a = 10var b : Stringif (a < 0) {b = “a是小于0的一个整数”} else if (a in 0…10) {b = “a是0到10的一个整数”} else {b = “a是大于10的一个整数”}2、)if语句作为 三元运算符在 Kotlin 中,if语句可以作为一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件

2022-03-15 20:22:38 1578

原创 Kotlin基础语法 三、运算符与运算符重载

1. 一、运算符Kotlin 的运算符都是以方法形式来实现的,这些运算符都具有特定的符号和固定的优先级,各种运算符对应的方法名都是固定的,我们只要为某类型提供了特定名称的方法,就可以对该类型的对象进行运算1.1、一元运算符一元运算符:即只有一个操作数1.1.1)简单的一元运算符:)+ 表示为操作数实现一个正号的意思,其操作数为数值型,对应 的方法unaryPlus())- 表示为操作数实现一个负号的意思,其操作数为数值型,对应的方法unaryMinus())! 表示取反的意思,其操作数为bo

2022-03-14 19:56:02 1398

原创 Kotlin基础语法 二、变量与常量

1. 变量的声明kotlin变量的声明必须使用var或val关键字。其中:var: 用此关键字声明的变量表示可变变量,即可读且可写(可以被多次赋值)。相当于Java中普通变量val: 用此关键字声明的变量表示不可变变量(也叫只读变量、运行期常量),即可读但不可写(不能重新赋值)。基本相当于Java中用final修饰的变量。标准定义格式:var或val 变量名: 数据类型 = xxx注意:) 常量与变量都可以没有初始化值,但是在引用前必须初始化。如果没有初始化,必须指明数据类型。如果是类的变

2022-03-13 20:30:20 2140 3

原创 Kotlin基础语法 一、数据类型

学习Kotlin 中使用的基本类型:数字、字符、布尔值、数组与字符串。1. 整形和浮点型1.1 )Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类型,因此值的范围也不同。类型大小(比特数)最小值最大值Byte8-128127Short16-3276832767Int32-2,147,483,648 (-2的31次方)2,147,483,647 (2的31次方 -1 )Long64-9,223,372,036,85

2022-03-10 21:09:11 2926

原创 Android onDraw()绘制流程解析

Android onDraw()绘制流程解析文章目录Android onDraw()绘制流程解析组件绘制的那些结论1. ViewRootImpl的performDraw()方法2. View 类的 draw(Canvas canvas) 方法解析组件绘制的那些结论先看结论再看分析绘制流程开始于performDraw()方法,该方法会调用根View(DecorView,也就是FrameLayout)draw()方法,所以绘制流程开始于ViewGroup的draw()方法。draw()方法负责

2021-08-19 20:32:21 2040

原创 Android onLayout()布局流程解析

Android onLayout()布局流程解析文章目录Android onLayout()布局流程解析1.组件布局流程的那些结论2. 源码解析1.组件布局流程的那些结论先看结论再看分析1.)layout流程始于ViewRootImpl的performLayout()方法,该方法会调用根View(DecorView)的layout()方法进行布局,因为DecorView是ViewGroup(FrameLayout),所以layout流程来到了ViewGroup(其实调用的是父类View类)的la

2021-08-19 20:21:29 1292

原创 Android onMeasure()测量流程解析

Android onMeasure()测量流程解析文章目录Android onMeasure()测量流程解析前言组件测量的那些结论一、MeasureSpec:测量规则二、查看测量流程源码2.1 查看ViewRootImpl的PerformTraveals()方法2.2 View类的默认onMeasure()方法2.3 从FrameLayout的onMeasure()方法了解自定义ViewGroup的测量行为前言众所周知,Android 中组件显示到屏幕上需要经历测量、布局、绘制三个阶段,我们

2021-08-16 19:57:20 1686

原创 Android ConstraintLayout用法全解析

ConstraintLayout 用法全解析文章目录ConstraintLayout 用法全解析前言一、 什么是ConstraintLayout?二、 ConstraintLayout的优缺点?2.1 优点2.1 缺点三、 基本使用方法3.1 最基础使用 --- 位置约束3.2 文字基线对齐3.3 居中和bias百分比偏移3.4 角度约束3.5 margin 和 goneMargin3.6 0dp(MATCH_CONSTRAINT)与组件大小3.7 0dp与宽高比例3. 8 Chains(约束链)3.9

2021-08-02 21:08:56 4430

原创 Android 沉浸式状态栏必须要知道的那些事

Android 的沉浸式状态栏文章目录Android 的沉浸式状态栏前言一、 什么是沉浸式状态栏?二、沉浸式状态栏的实现阶段1.1.Android4.4 - Android 5.0 (API 19-21):1.2.Android 5.0(API 21)以上版本:1.3. Android 6.0(API 23)以上版本:三、setSystemUiVisibility 对于沉浸式的具体影响3.1 View.SYSTEM_UI_FLAG_FULLSCREEN (隐藏状态栏)3.2View.SYSTEM_UI_F

2021-07-22 21:13:46 1884 4

空空如也

空空如也

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

TA关注的人

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