联系我们
简单又实用的WordPress网站制作教学
当前位置:网站首页 > 程序开发学习 > 正文

Android的一些项目知识点整理

作者:访客发布时间:2023-12-07分类:程序开发学习浏览:92


导读:本篇文章是我研究的项目整理的一些知识点,方便自查,后续会不断整理旧的内容和添加新的内容,本篇文章也加了一些常用库的地址,方便查找followingline(“_”)asdigi...

本篇文章是我研究的项目整理的一些知识点,方便自查,后续会不断整理旧的内容和添加新的内容,本篇文章也加了一些常用库的地址,方便查找

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双根和单根手指旋转

两根手指旋转

旋转检测库

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

贴一下源码:

Android的一些项目知识点整理

Kotlin中的集成操作

groupBy

根据分组函数对集合进行分组,返回分组结果MapMap中的key类型由分组函数决定,value的类型是List

groupBy两个参数的函数会对集合元素的值进行转换,最终添加到Map

例如我们需要对字符串按长度进行分组,那么Mapkey就是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]]

可以很明显看到 mapflatMap 的区别,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

Android的一些项目知识点整理

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


标签:知识点项目安卓系统


程序开发学习排行
最近发表
网站分类
标签列表