android
文章平均质量分 86
我们间的空白格
这个作者很懒,什么都没留下…
展开
-
Flutter旋转平移缩放动画实例 -- 手动实现底部FloatingActionButton弹入弹出动画
这个动画效果在app中很常见,由底部蓝色的FloatingActionButton旋转动画和另外的三个白色按钮的弹入弹出平移缩放动画组成。原创 2022-08-16 16:13:53 · 2494 阅读 · 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 · 594 阅读 · 0 评论 -
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 · 860 阅读 · 0 评论 -
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 · 491 阅读 · 0 评论 -
Kotlin重载操作符和约定声明规则
Kotlin中最简单明了的使用约定的例子就是算数运算符。在Java中算数运算符只可以使用在基本数据类型上,+号可以使用在String上。当我们想在BigInteger类上使用+,或者想使用+=添加元素到一个集合中时Java就做不到了。但是Kotlin中就可以做到。1.重载二元算数运算符 首先从+开始,实现将两个点的坐标值加起来,使用修饰符定义一个操作符函数定义Point对象,此时可以使用+号 也可以把操作符函数定义成扩展函数,而使用扩展函数语法也会是一种通用的定义操作符扩展函数的模板原创 2022-07-06 11:07:33 · 883 阅读 · 0 评论 -
Android Fragment完全解析
Android Fragment完全解析转载 2022-06-30 10:51:15 · 951 阅读 · 0 评论 -
Android原生webView概述
1.基本使用 首先要添加网络权限从Android9.0(API 28)开始默认不再支持直接load未加密的url,解决方法是在manifest 中application节点添加android:usesCleartextTraffic="true"加载方式:如果不给webView.webViewClient赋值那么它会在浏览器中打开这个网页,而不是在WebView中打开,如果...原创 2022-06-14 11:33:12 · 805 阅读 · 0 评论 -
Android原生动效概述
Android原生动效概述原创 2022-06-08 17:24:52 · 944 阅读 · 0 评论 -
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 · 1150 阅读 · 0 评论 -
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 · 621 阅读 · 0 评论 -
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 · 2593 阅读 · 0 评论 -
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 · 4235 阅读 · 0 评论 -
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 · 5335 阅读 · 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 · 1081 阅读 · 0 评论 -
ViewPager2高度无法跟随fragment自适应问题
背景:ViewPager2下不同的tab会对应各自的fragment,往往这些fragment的高度是不同的,然而在允许预加载的条件下ViewPager2的高度会始终跟随最高的那个fragment的高度,这就会导致其他不够高的fragment出现留白的问题。即便禁止了预加载,只要点击tab加载了比当前fragment更高的另一个fragment那么viewPager的高度也会随着改变,就仍然会导致上一个fragment出现大量留白的问题。如下所示:思考:首先我们想要的效果是viewPager的高度.原创 2022-02-08 16:31:00 · 7195 阅读 · 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 · 3316 阅读 · 0 评论 -
Kotlin 委托
委托:一种设计模式,一种能够替代继承的方式。操作对象自己不去处理某段逻辑而是委托给另一个对象去处理。一.类委托将一个子类的具体实现委托给另一个子类去完成。这句话的意思就是说一个子类必须实现的接口属性、方法可以交给另一个已经实现了该接口的子类去完成。实现一个List接口:class MyList<T>: List<T> { override val size: Int get() = TODO("Not yet implemented")原创 2022-01-19 15:24:51 · 2218 阅读 · 0 评论 -
Kotlin泛型-类型擦除、泛型实化
Kotlin泛型-类型擦除、reified关键字原创 2022-01-12 11:31:01 · 2928 阅读 · 0 评论 -
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 · 2349 阅读 · 0 评论 -
Android 自定义图片裁剪框功能
Android自定义图片裁剪框功能大体的功能如上gif所示,最后蓝色裁剪框中的矩形图片区域可以进行截取并返回一个Bitmap对象。整个裁剪功能由两个自定义的View组件完成,首先是图片显示控件DragScaleView,主要完成图片的双指触碰缩放和单指触碰滑动,以及根据裁剪框的变化对图片进行对应的平移和缩放;然后就是裁剪框控件DrawBoxView,他俩的父布局是FrameLayout,所...原创 2019-11-28 21:48:28 · 4063 阅读 · 8 评论 -
Kotlin(4)方法
Kotlin(四)方法的使用一.方法的基本用法1.声明这里用onCreate方法为例来比较java和kotlin在声明方法时的不一样java:@overridepublic void onCreate(Bundle savedInstanceState) { ...}kotlin:override fun onCreate(savedInstanceState...原创 2019-06-05 14:15:13 · 271 阅读 · 0 评论 -
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 · 815 阅读 · 0 评论 -
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 · 321 阅读 · 0 评论 -
Spannable
Spannable和SpannableStringBuilder 1.和String的关系 这三个玩意都是用来存储字符串的,但和String不同的是前面那两兄弟有一个 setSpan()方法,这个方法可以给存储的字符串添加各种样式,而String不行 2.SpannableString和SpannableStringBuilder...原创 2019-06-03 16:51:58 · 368 阅读 · 0 评论 -
Kotlin(1)基础的一些介绍和配置
Kotlin(一)基础介绍和配置一.kotlin介绍这些年Android系统一直占据着移动设备系统市场的主导地位,不论是从嵌入式设备的开发还是软件APP的开发大多数都是以Android系统为基础,开发的语言也是以java为主流,C/C++更多是面向嵌入式的方向。然后h5那边兴起的前端三大框架:react、vue、angular使移动开发和前端web开发接轨,本人只搞过ionic开发移动端,...原创 2019-06-03 18:33:47 · 200 阅读 · 0 评论 -
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 · 642 阅读 · 0 评论 -
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 · 203 阅读 · 0 评论 -
Kotlin(6)简单Android控件
Kotlin(六)简单Android控件的使用kotlin中控件对象的获取将不再需要类似于findViewById这样的方法来获取,直接使用布局文件中的id就可以获取到对应的控件对象一.按钮1.Button关于按钮的使用需要注意的还是它的三种点击响应的写法以及在匿名函数的方式下视图对象没有使用时的最简形式:匿名函数的形式btn.setOnClickListener{ ...原创 2019-06-11 09:47:26 · 754 阅读 · 0 评论 -
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 · 2358 阅读 · 0 评论 -
关于APP冷启动时最开始的白屏以及处理方式
关于APP冷启动时最开始的白屏以及处理方式一.冷启动与热启动通常情况下app的启动方式包括冷启动和热启动,当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动,如果后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台),这种启动会从已有的进程中来启动应用,这个方式叫热启动。而二者不同的地方就...原创 2019-07-04 10:01:50 · 370 阅读 · 0 评论 -
Android广播Broadcast基础理解概述
Android广播基础理解广播可以分为系统广播和自定义广播,系统广播就是手机系统根据自身状态信息发出相应的广播,比如电池电量不足10%、手机完成开机、手机所在地理位置发生了变化(从安徽跑到了江苏)等,这些情况下系统都会发出一条广播,应用程序可以选择接收或者不接收。一.广播的动态和静态注册1.动态注册即不在AndroidManifest.xml文件中声明广播接收者,而是在需要接收某广...原创 2019-05-07 18:40:45 · 223 阅读 · 0 评论