自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ung8023

走在一条路上

  • 博客(100)
  • 问答 (2)
  • 收藏
  • 关注

原创 【自定义View】Android圆饼进度条

Android圆饼形进度条

2024-06-06 19:11:02 366 1

原创 Android中focusableInTouchMode会导致第一次点击事件失效

我们很多时候会对某些View设置点击事件,但是,当对这个View同时设置了。,在Activity代码中对View设置点击事件。会被消费为为此View获取焦点。创建一个View,并同时指定了。

2024-05-31 14:08:04 423

原创 Android Baidu地图SDK只展示蓝背景,没有绘制内容问题解决

项目里接入了Baidu地图SDK,用于展示信息、选点。在一个新的Activity中,引入了,用于地图展示。选点过程有两个页面。A页面中有一个不能滑动的地图,只是用来展示,没有其他任何操作。点击A页面中的地图,进入全屏的地图页(B),进行选点,选好点之后,跳回到A,并回传选好的点。页面A:区域展示选择的地图位置页面B:用于选择位置在A跳转B,整个过程执行3次之后,再回到A时,地图变蓝,再跳转到 B,B页面的地图也变蓝。执行过程:A页面, 点地图,跳转到B,选点,返回。再执行上一步。

2024-05-25 11:39:56 210

原创 Baidu地图SDK接入后的点击事件实现。

在很多APP中,我们接入了百度地图,而这个百度地图只是拥有提示、展示的作用,并不希望它具有操作功能。比如,在外卖APP中,粗略地展示一下地理位置,点击地图后,直接跳转对应的导航。于是这样写到

2024-05-25 11:38:54 558

原创 Android 构建时:Manifest merger failed : Attribute application@name value

如果当前已经存在了其他需要,replace的东西, 就在后边追加,以。解决方案:在主Manifest中增加replace。

2024-05-24 16:19:06 241

原创 Flutter 升级build_runner版本后,报 Logger.onLevelChanged错误

Flutter升级了BuildRunner版本之后,报错如下图。

2024-05-09 16:57:47 308

原创 EditText与NestScrollView嵌套使用时,滑动冲突处理

在Android开发中经常会有在一个大页面中,包含一个EditText的情况,一般情况下,大页面会通过或者ScrollView当作根View。

2024-04-28 16:21:47 1127

原创 Kotlin泛型之 循环引用泛型(A的泛型是B的子类,B的泛型是A的子类)

我们来看一下Java接着我们看IDE的提示:意思是其实和Kotlin提示的差不多,希望你指定一个泛型类型,而不是直接使用这个类。在Java中,为了解决这个提示,可以使用?。>> {>> {当我们在后边的泛型中加入?来规定一下泛型,编译器就不会提示错误和警告。我们尝试在Kotlin的代码中实现增加上界的方式: 我们知道kotlin 的通配符对应着java中的?,那我们模仿一下Java的方式不就行了吗?然后我又尝试了很多方式都不行。

2024-04-28 12:49:58 1284 3

原创 ViewPager2引起的Wrong state class, expecting View State but received class

在文章中我知道,这个问题是 因为 视图树中存在两个id相同的View,并且在恢复数据时出了问题。但是页面中我们明明都是指定了id,按道理来讲是不会出现重复的呀?通过模拟与查看源码发现,我们虽然给ViewPager2指定了Id,像这样:我们都知道ViewPager2是由RecyclerView实现的,其内部还有一个View,就是RecyclerView,她的RecyclerView的id,并不是通过指定的方式确定的,而是通过一个方法自动生成的。如果在整个视图中,有一个View的id是和。

2024-04-25 12:55:47 1270

原创 自定义View时,如何使用onSaveInstanceState与onRestoreInstanceState

当我们直接继承View进行自定义时,可以通过重写两个方法,并保存与恢复对应数据。

2024-04-25 12:52:06 777

原创 Android 组件提供的状态保存(saveInstanceState)与恢复(restoreInstanceState)

在Android的组件Activity中,有这样一对方法:和这两对方法,可以让我在Activiy被销毁时,保存状态;以及在Activity重建时,恢复状态。比如:当我们在输入框中输入了内容,此时因为种种原因,将App退至了后台。这个处于后台的App很有可能因为内存不足、其他配置,被系统杀死。当我们恢复这个页的时候,希望它能够保存住我们原来输入的内容。除了,我们自己手动保存,也可以利用系统的和那么,在Android已有的系统中,是如何做的呢?

2024-04-25 11:52:37 524 2

原创 新版AndroidStudio的Gradle窗口显示task list not built 问题解决

在使用新版AndroidStudio时,会出现,的问题。如果你记得task的名字,当然可以 直接通过命令或者直接执行即可,但是若是记不住,还是把这个任务构建处理比较好用。

2024-03-08 12:48:21 2185

原创 使用KMP(kotlin多平台)开发Compose,如何打包成可执行文件?exe、DMG……

上一次的分享中,我分享了,如何在windows平台上直接通过IDE运行compose。使用的方式是:双击ctrl,然后,执行gradle run有朋友问,我是能够执行了,但是这毕竟是调试方式,它还不是一个可以分享给别人的可执行文件呀,我写一个程序,只能在自己电脑上运行,那没啥意义呀。那今天我分享一下,如果将compose的代码,打包成一个Windows平台的可执行文件(其他平台同理,看一下就知道)。

2024-03-05 12:03:50 2733 3

原创 AndroidStudio如何安装其他版本JDK

可以直接安装图中的指示,找到对应的选项卡,下载,或者添加JDK即可。

2024-03-05 11:55:33 619 2

原创 使用KMP(kotlin多平台)在windows上出现:Cannot locate tasks that match ‘:composeApp:compileJava‘ as task ‘compil

kotlin 多平台在windows上运行失败解决方案

2024-01-26 10:59:38 787 7

原创 数据结构与算法:插入排序

arr[i]和arr[i-1]比,若 arr[i-1] 大于arr[i],交换两个值。arr[0]和arr[1]对比,若arr[0] 大于 arr[1] ,交换两个值,arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。时间复杂度 O(n²)

2023-12-14 00:51:07 113

原创 数据结构与算法:冒泡排序

arr[i] 和 arr[i +1]对比,若arr[i]大于 arr[i+1],交换两个值。arr[n-2]和arr[n-1]对比,若arr[n-2]大于arr[n-2],交换两个值。arr[0] 和 arr[1] 对比,若arr[0] 大于 arr[1], 交换两个值。arr[1] 和 arr[2]对比,若arr[1] 大于 arr[2], 交换两个值。arr[2] 和 arr[3]对比,若arr[2]大于 arr[3],交换两个值。确定出 arr[1]的值,同时确定了arr[0]的值。

2023-12-14 00:49:42 92

原创 数据结构与算法:选择排序

每次都要在剩余未排序的集合中,找到那个最小(或者最大)的值,放到当前位置。从当前位置到最后,找出最小(或者最大)值,放在当前位置,位置后移。第i次:找到 i ~ n-1范围内最小值,放在i 位置。第一次:找到0 ~ n-1范围内的最小值,放在0位置。第二次:找到1 ~ n-1范围内最小值,放在1位置。最小或者最大,影响的是降序还升序。额外空间复杂度 O(1)时间复杂度 O(n²)

2023-12-14 00:48:24 139

原创 数据结构与算法:衡量算法好坏的指标——复杂度

复杂度,用来分析算法执行过程中,所需要的资源。时间复杂度是衡量所需要的时间。空间复杂度,是衡量所需要的(内存)空间。

2023-12-14 00:46:15 309

原创 MAC电脑连接外接显示屏,颜色显示有问题,又粉、紫色蒙版,问题处理(1)

买了一个显示器,想给mac做分屏使用,结果连上之后发现,整个屏幕像是被蒙上了一层紫色的蒙版。

2023-11-17 10:54:22 6382

原创 在项目中增加网络加载需要考虑什么?

一般文件校验失败了,也就证明当前缓存是有问题的,或者中间被人篡改了。这时根据当前文件是缓存还是直接下载的文件,去做对应的处理。如果是缓存文件,会直接删除重新下载,如果非缓存文件,可能提示出错等。既然是缓存,就需要考虑缓存的清理策略。对于磁盘缓存来说,如果你的项目中已经存在磁盘缓存,可能需要将当前的缓存文件类型,纳入到原来的缓存管理中,进行统一处理。我们熟知的缓存策略可能就是Glide中的图片三级缓存策略了。网络加载的第一步肯定是下载,那么选择一个合适的下载器是十分重要的,这个下载器最好支持什么功能?

2023-08-12 23:26:10 252

原创 腾讯出品Pag动画框架在Android端的使用-网络Pag加载

在我们可以通过assets的方式加在pag文件之后,我们会考虑下一个问题,可不可以用Pag框架加载网络文件?为什么会有这样的问题出现,或者说网络方式加载可以解决什么问题?APK 体积增加问题当一个项目规模比较大的时候,会做很多优化工作,其中「APK瘦身」便是一项优化点。通过网络的方式加载可以减少内置文件,从而降低APK大小。热更新问题我们有时候是有这样的需求的,线上更改动画效果,通过网络方式便可以做到。新的功能或者组件上线,需要更新客户端问题。

2023-08-12 23:23:41 1625

原创 腾讯出品Pag动画框架在Android端的使用-初级

Pag动画框架作为一个第三方框架,它的优缺点与Lottie是相似,此处不过多赘述。如果你们的项目中打算用了,肯定是经过了一定的调研的。Pag动画框架分几个版本,有免费的有收费的。我们目前用的社区免费版,只用来展示Pag动画。高级的版本可以播放视频、声音等,酌情选取。

2023-08-12 23:21:36 1574

原创 非原生动画框架在Android端的使用

在Android平台上,除了我们熟知的属性动画(Animator),View动画(Animation),后面出的Transition动画,还有其他第三方出的动画库可以供我们使用:Lottie(Airbnb)、Pag(腾讯)与Lottie相比,Pag的优势在于,只需要一个pag文件即可(整体打包)。我们的项目中用过lottie 动画,现在在逐步使用Pag动画。文档:http://airbnb.io/lottie/#/方便云控,可以通过下载动画文件,更新动画。有一定的可复用性,通过替换文件实现。

2023-08-12 23:15:18 142

原创 Gradle build 失败后提示.lock文件,解决办法

在Gradle build失败之后时,有时候强制关闭AndroidStudio,再次打开build时,会提示各种.lock 文件问题,删除了一个还有下一个,而且路径不一样。一般情况下是这两个文件夹下的lockfile影响继续build。

2023-07-28 15:21:03 1024

原创 让你的.sh脚本文件可以执行

新创建的 .sh 文件执行时,会报错,怎么办?其实是因为这个文件还没有成为真正的可执行文件,会报错。

2023-07-28 15:14:52 102

原创 Android TextView 展示特殊字符高度变高问题解决

在我们的项目中,展示文字是很常见的需求,但是在线上展示中发现,有些信息是特殊字符展示的,而且这些字符的高度会导致TextView的高度变高(与正常字符比)。效果如下:很明显,带特殊字符的高度,会非常高!

2023-06-27 21:42:20 1304

原创 PAGFile手动设置速度失效问题处理

变速播放:首先设置 PAGFile.setTimeStretchMode(PAGTimeStretchMode.Scale),然后通过 PAGFile.setDuration() 接口设置你想变速后播放的时长即可,设置比原始更长时间是慢速播放,设置更短时间是快速播放。举例:一个8s长的pag文件需要循环播放3~6s,将PAGFile添加到PAGComposition后,设置PAGFile的startTime为-3000000,duration为6000000。原运动速度为1s总时长,想改为2s。

2023-06-08 12:00:29 341

原创 Glide预加载图片preload失效问题修复!

我在preload的时候,没有传入宽高,默认按原图取,走的api是不带分辨率path 的。而当使用的地方传入了imageView,它会根据imageView的宽高,请求对应分辨率的API,导致转换后的key变了,相当于我请求的虽然是同一个地址,但是转换成了两个。结果发现,并没有想象中的预加载效果,它貌似还是走的网络加载。为了提高用户体验,想要先下载图片,然后下载完成之后,再对图片进行展示,这样用户就不必看到加载图片时的空白状态。最终发现,是因为生成的key不一样,怎么会不一样呢,我明明获取的是同一张图片!

2023-05-25 15:01:35 1101

原创 Android事件分发汇总贴

Android事件分发上是从触摸板硬件层,一直传递到当前处理的View的过程。期间涉及到跨进程通信,主线程Handler处理消息,Window传递事件,Activity传递事件等等等等。学习事件分发,让我有能力面对复杂状态下,使控件有正确的行为。之前已经写好了3篇文章,从流程,到源码分析,到实际案例演示。希望你看过之后也有帮助,可以在评论区与我探讨遇到的各种情况哦。

2023-04-03 16:58:23 89

原创 Andorid 事件分发机制案例实操与解析

根据问题的前提,我们知道这是两个RecyclerView重叠摆放的问题导致的,当然我们可以自定义ViewGroup,重新定义两个View的摆放规则,但是那不在我们本次讨论范围内,我们只考虑当前的实现方案,如何最终实现这个功能。Android 的触摸事件,是从屏幕硬件触发,最终到达目前正在展示的Activity的,至于这期间如何传递的,此处不做讨论,我们讨论的起点,从Activity接收到触摸事件开始。事件传递相关的流程与 源码分析在上面的文档中已经看到了,接下来,我们来实现一下,文章开头提到的实现目标。

2023-04-03 16:50:52 514

原创 Android 事件传递相关流程图

之前从来没有总结过Android事件传递的流程图,此处,绘制一下简版Android事件传递流程图,方便理解事件传递的过程。

2023-04-03 14:44:54 183

原创 Android 事件分发源码解析(基于API31)

View类型的组件,接收到一个事件,是用dispatchTouchEvent开始执行。若自身设置了OnTouchListener,则执行OnTouchListener的onTouch方法。根据OnTouchListener的OnTouch方法的返回值判断是否执行自身的onTouchEvent方法onTouch 返回值为false,则执行自身的onTouchEvent方法onTouch返回值为true,直接返回结果。

2023-04-03 14:34:59 583

原创 RecyclerView 滚动条不显示

RecyclerView的滚动条不显示了,代码如下。给RecyclerView 加一个background即可。

2023-02-15 10:52:35 654

原创 Android Studio 升级之后Logcat变了个鬼样子

在AndroidStudio 升级到Dolphin之后,Logcat变了。恢复到原来状态在下方。这是新增加的实验性功能,不过我感觉不如原来的好用,把前边的✅去掉就好了。

2023-02-10 15:34:52 553

原创 切换Fragment,RecyclerView滑动一下

在四个tab中,其中一个Tab下包含了一个横向的RecyclerView,每次切换到该Tab时,RecyclerView会滑动一下。只在三星 Android 8.0 上复现。

2023-01-17 10:37:16 381

原创 Serializable引起的崩溃NotSerializableException

此类中还调用了其他的类对象(也就是上文中的VipInfo),调用的类对象必须一并实现Serializable。在Android中使用时,我将它作为一个参数,通过Bundle传递给Fragment,但是在序列化时报错了。

2022-12-28 10:29:08 339

原创 Kotlin调用Java代码时引起空指针异常,要怎么避免?

在Android项目中,经常会出现Kotlin 代码调用Java代码的情况,而在Kotlin编译器中,有这样一个默认的规定,如果Java中的代码被Nullable标记才认为是可控类型,否则, 如果你不指定为可空类型,利用类型推断会直接断定为非空类型。在Java里边最麻烦的便是空指针异常,而即使转到了Kotlin,当调用Java 代码时,仍然会存在这样的问题。注释,包括Android框架中的代码,也不是所有的地方都加了该注释,这样不利于Kotlin编译器进行类型推断,当没被。

2022-11-25 16:54:38 1070

原创 Android 通过ContentResolver添加CalendarEvent,删除后在某些机型上依然存在问题

App添加日历提醒功能,添加到系统日历中,网上有很多例子,可以参考,在我的测试机上,点击开关时,去添加事件(同时添加提醒时间),点击关闭开关时,去删除事件(同时删除提醒)。在某些机型上,即使删除了事件,还是能查询得到事件,但相关提醒已经删除了。在判断事件是否存在时,同时判断,是否已经删除~~开关状态通过 判断事件是否存在来判断。projection中 添加。在查询的实体中,添加。

2022-09-19 15:14:23 552

原创 Android系统悬浮球开发,在Android12上不显示的问题排查与处理。

Android悬浮窗,横竖屏显示有问题

2022-08-08 20:21:20 3166

gradle lock文件清除

gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除

2023-07-28

清除gradle产生的 lock文件脚本

清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本

2023-07-28

Chrome插件-M3U8 Downloader

1. 能直接下载M3U8视频的插件。自动标记成功的区块与失败的区块。 2. 如果想要把一些m3u8的视频保存到本地,可以直接通过这个插件下载。 3.当然,你需要先知道m3u8的地址才行,把地址copy过来即可。 4. 有条件的话直接去官方下载哦,毕竟官方也是免费的。 5. 导出来只是为了方便,无法访问Chrome商店的朋友使用。 6. 因为我是免费下载的,所以也免费提供出来。 官方网站:https://m3u8.dev/

2023-03-15

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

TA关注的人

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