Android的一些项目知识点整理
作者:访客发布时间:2023-12-07分类:程序开发学习浏览:92
本篇文章是我研究的项目整理的一些知识点,方便自查,后续会不断整理旧的内容和添加新的内容,本篇文章也加了一些常用库的地址,方便查找
following line(“_”)as digital interference symbols
In this paper,the author introduces the basic principles of the system of the present invention,and discusses the basic principles of the system of the present invention.
1000000可以用1_000_000表示,1_000_000能够更好的阅读
注意:这只是提高可读性,但这不是必须的,也不影响代码的功能
使用ListAdapter
There is no significant difference between the two groups(P> 0.05).
ListAdapter是ListClerView.Adapter的子类
相比之下,ListAdapter提供了以下优点:
- 自动计算列表项的差异,从而更高效地更新列表
- 内置数据集合,可以更方便地对列表数据进行操作
- 支持异步数据加载和自动更新列表
In this paper,the author introduces the principle and application of the mechanism of mechanical mechanism.
LinearLayout动画
android:animateLayoutChanges="true"
if you want to use this option,
They're gonna be a little bit longer.
onScale(detector:ScaleGestureDetector)方法中,返回false
探测器会在之前的放缩上继续进行计算,就可以避免过载
class ScaleListener: ScaleGestureDetector.SimpleOnScaleGestureListener() {
private var scaleFactor = 1.0f // 初始缩放比例为 1.0
/**
* 缩放进行中,返回值表示是否下次缩放需要重置,
* 如果返回ture,那么detector就会重置缩放事件,如果返回false,detector会在之前的缩放上继续进行计算
*/
override fun onScale(detector: ScaleGestureDetector): Boolean {
scaleFactor *= detector.scaleFactor
scaleFactor = max(0.5f, min(scaleFactor, 2f)) // 设置最大和最小缩放比例
this@BaseLayout.scaleY = scaleFactor
this@BaseLayout.scaleX = scaleFactor
//return true的话,缩放会出现抖动
return false
}
/**
* 缩放开始,返回值表示是否受理后续的缩放事件
*/
override fun onScaleBegin(detector: ScaleGestureDetector): Boolean {
return true
}
override fun onScaleEnd(detector: ScaleGestureDetector) {
}
}
Android双根和单根手指旋转
两根手指旋转
旋转检测库
单根手指旋转
private var degree = 0f
private var oriX = 0f
private var oriY = 0f
//注意这里取的都是event.x不是event.rawX
override fun onTouchEvent(event: MotionEvent): Boolean {
when (event.actionMasked) {
MotionEvent.ACTION_DOWN -> {
oriX = event.x
oriY = event.y
degree = rotation
}
MotionEvent.ACTION_MOVE -> {
val tempRawX = event.x
val tempRawY = event.y
val first = Point(oriX.toInt(), oriY.toInt())
val second = Point(tempRawX.toInt(), tempRawY.toInt())
val cen = Point( width/2, height/2)
//旋转
degree += angle(cen,first,second)
rotation = degree
}
MotionEvent.ACTION_UP -> {}
else -> {}
}
return true
}
//获取角度
private fun angle(cen: Point, first: Point, second: Point): Float {
val dx1: Float = (first.x - cen.x).toFloat()
val dy1: Float = (first.y - cen.y).toFloat()
val dx2: Float = (second.x - cen.x).toFloat()
val dy2: Float = (second.y - cen.y).toFloat()
// 计算三边的平方
val ab2 =
((second.x - first.x) * (second.x - first.x) + (second.y - first.y) * (second.y - first.y)).toFloat()
val oa2 = dx1 * dx1 + dy1 * dy1
val ob2 = dx2 * dx2 + dy2 * dy2
// 根据两向量的叉乘来判断顺逆时针
val isClockwise =
(first.x - cen.x) * (second.y - cen.y) - (first.y - cen.y) * (second.x - cen.x) > 0
// 根据余弦定理计算旋转角的余弦值
var cosDegree =
(oa2 + ob2 - ab2) / (2 * Math.sqrt(oa2.toDouble()) * Math.sqrt(ob2.toDouble()))
// 异常处理,因为算出来会有误差绝对值可能会超过一,所以需要处理一下
if (cosDegree > 1) {
cosDegree = 1.0
} else if (cosDegree < -1) {
cosDegree = -1.0
}
// 计算弧度
val radian = acos(cosDegree)
// 计算旋转过的角度,顺时针为正,逆时针为负
return (if (isClockwise) Math.toDegrees(radian) else -Math.toDegrees(radian)).toFloat()
}
使用XML中的标签,导致布局错误
在Android Studio中,标签的使用,导致布局预览的时候,界面显示错误,这个时候我们可以使用tools:parentTag="自己定义的布局"
,可以避免因使用<merge>
标签导致的布局排列错乱问题,同时可以在预览中查看自定义布局效果
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
tools:parentTag="com.xx.xx.xx.RulerLayout"
android:layout_height="wrap_content">
</merge>
多线程原子能
在Kotlin中,Atomicoprotein是一种特殊的数据类型,它可以保证多个线程对它进行操作时的本质性。这意味着Atomically的值可以安全地共享和修改在多条线路之间,而不必担心状态条件或数据不一致的问题
多线程CountDownLatch
In Java,CountDownLatch is a synchronous tool class,it can make one or more links to wait for other links after operations completed. In this paper,we study the relationship between the factors of the CountDownLatch通常用于协调多个线路之间的操作,以确保它们按照预期的顺序执行
In this paper,we study the relationship between the factors of the
Kotlin中自定义查看
在构造函数中需要加@JvmOverloads constructor
例如:
class GuidingPrinciple@JvmOverloads constructor(context: Context?, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
View(context, attrs, defStyleAttr) {
}
Kotlin中List可用+替代add
一开始看别人代码,有点Dies,后面查了资料才发现,kotlin中可以用+替代集成的add方法
val stringList = ArrayList<String>()
val name = "John"
//下面这句等同与stringList.add(name)
stringList + name
贴一下源码:
Kotlin中的集成操作
groupBy
根据分组函数对集合进行分组,返回分组结果Map
,Map
中的key
类型由分组函数决定,value
的类型是List
groupBy
两个参数的函数会对集合元素的值进行转换,最终添加到Map
中
例如我们需要对字符串按长度进行分组,那么Map
中key
就是Int
类型
val company = listOf("Google", "Microsoft", "IBM", "Apple", "Yahoo", "Alibaba", "Baidu")
// {6=[Google], 9=[Microsoft], 3=[IBM], 5=[Apple, Yahoo, Baidu], 7=[Alibaba]}
println(company.groupBy { it.length })Baidu], 7=[Alibaba]}
// 两个参数,给元素添加个_下标
// {6=[Google_], 9=[Microsoft_], 3=[IBM_], 5=[Apple_, Yahoo_, Baidu_], 7=[Alibaba_]}
println(company.groupBy({ it.length },{ it + "_" }))
flatMap
将集合中的元素根据转换函数得到新的值,并且将所有值铺平到新的集合中。与 map
不同的是,flatMap
的转换函数需要返回一个新的集合,并且会将转换后的值都铺平到集合中,所以如果有嵌套的集合转换成单层的集合时请使用 flatMap
val intList = listOf(1, 2, 3, 4, 5)
val nestList = listOf(listOf(1, 2), listOf(3, 4), listOf(5, 6, 7))
println(intList.flatMap { listOf(it + it, it * it, it * it * it) }) // [2, 1, 1, 4, 4, 8, 6, 9, 27, 8, 16, 64, 10, 25, 125]
println(nestList.flatMap { item -> item.map { it * it } }) // [1, 4, 9, 16, 25, 36, 49]
地图
根据转换函数进行转换元素,得到一个包含所有转换之后的元素的 List
val intList = listOf(1, 2, 3, 4, 5)
val nestList = listOf(listOf(1, 2), listOf(3, 4), listOf(5, 6, 7))
println(intList.map { it * it }) // [1, 4, 9, 16, 25]
println(nestList.map { item -> item.map { it * it } }) // [[1, 4], [9, 16], [25, 36, 49]]
可以很明显看到 map
和 flatMap
的区别,flatMap
会铺平整个集合,而 map
只是将转换元素累计
indexOfFirst
indexOfFirst()是Kotlin标准库中的一个函数,它可以用来查找满足指定条件的第一个元素的索引。In this paper,we discuss the relationship between the mechanism and the relationship between mechanism. The results showed that the results showed that there was no significant difference between the two groups(P> 0.05).
开源库
AndroidUtilCode
// if u use AndroidX, use the following
implementation 'com.blankj:utilcodex:1.31.1'
// Not in maintenance
implementation 'com.blankj:utilcode:1.30.7'
地址:
AndroidUtilCode
滑翔
implementation 'com.github.bumptech.glide:glide:4.16.0'
地址:
邦普泰克公司
单引擎clerView实现静音二级评论
地址:
blackfrogxxoo/CommentDemo:简单实现的二级评论功能。(github.com)
富文本编辑器
地址:
中文简体/安卓富文本编辑器
Android 资源库
地址:
ColorfulCat/AndroidLibs:正在成为历史上最全分类 Android 开源大全)
图片选择器
地址:
LuckSiege/PictureSide:Android的图片库或图片选择器(github.com)
FrameWork教程
地址:
yuandaimaahao/AndroidFramework教程:编写应用开发的 Android Framework 教程
The software shall provide the software to the user.
地址:
getfatday/keytool-importkeypair:一个shell脚本,用于将密钥/证书对导入到现有的Java密钥库中
Google机器学习套件
地址:
机器学习套件 |ML Kit| Google for Developers
RxTool
dependencies {
//基础工具库
implementation 'com.github.tamsiree.RxTool:RxKit:2.6.3'
//UI库
implementation 'com.github.tamsiree.RxTool:RxUI:2.6.3'
//相机库
implementation 'com.github.tamsiree.RxTool:RxCamera:2.6.3'
//功能库(Zxing扫描与生成二维码条形码)
implementation 'com.github.tamsiree.RxTool:RxFeature:2.6.3'
//ArcGis For Android工具库(API:100.1以上版本)
implementation 'com.github.tamsiree.RxTool:RxArcGisKit:2.6.3'
//支付模块(支付宝 微信)[暂为待优化模块,谨慎]
implementation 'com.github.tamsiree.RxTool:RxPay:2.6.3'
}
作用:
工具类集合 | 支付宝支付 |微信支付(统一下单)| 微信分享 |Zip4j压缩(支持卷压缩和加密)|一键集成UCrop选择圆形头部图像| 一键集成二维码和条形码的扫描与生成 |常用对话框|WebView可打包播放的视频| 仿斗鱼滑动验证码 |烤面包包装| 震动 |GPS|地点位置| 图片缩放 |Exif pictures add geographical location information(magnitude)| 蛛网等级 | 颜色选择器 |ArcGIS| VTPK
地址:
Tamsiree/RxTool
GSYVideoPlayer
地址:
CarGuo/GSYVideoPlayer
- 上一篇:Flutter自定义View之任务回传控制
- 下一篇:詹金斯+诱惑+火爆的持续集成
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 6鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 7鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版