自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 flutter背景贴图的困难总结

用canvas完成缩放,平移,这是最基本的常识。而我一开始却偏偏没那么做。走上歧途的原因是,觉得canvas的大小是有前景图决定的,对前景图放大缩小,和对背景图没有关系。实际上用前景图的大小调canvas.saveLayer(), 可以再次扩大canvas。这个坑,等后面采用canvas缩放策略的时候,还会遇到。UI上取得平移位置距离,是UI上view的, 并不是真实图片上的平移动,这是两回事,需要做好转换。一开始就走上了自己处理缩放,平移的道路了。可是怎么也处理不好。直接处理canvas。

2024-07-05 15:24:38 357

原创 Flutter InteractiveViewer CustomPaint的使用总结

drawPath方法在缩放的情况下,有性能问题,卡帧,掉帧,甚至crash。最近产品上有个图片编辑的需求,需要对编辑区域做放大和缩小, 以方便用户编辑图片。这期间遇到几个问题。多了同样会有性能问题,卡帧,掉帧,甚至crash。在缩放时,CustomPaint会反复刷新,尽可能避免不必要的刷新。做到在缩放时不刷新,在编辑时刷新。如果只是单纯的缩放,没有对缩放的内容进行改变和更新, 那么基本没啥问题。区域缩放后,手指点击的区域和原图编辑区域,这儿有个映射关系。下面都是针对CustomPaint缩放导致的问题。

2024-06-12 09:40:23 644

原创 swift语言学习总结

在父类初始化方法调用之后,在子类构造器中给父类的属性赋值时,会调用父类属性的 willSet 和 didSet 观察器。枚举关联值,这个功能很好,就是附带信息用的。15.数组修改,追加append, 删除remove, 追加另外一个数组+=, 插入insert, 判空isEmpty。闭包逃逸,就是说闭包传到函数里面,但是没有执行闭包, 只是把闭包引用给了别人。struct是值类型,所以赋值的时候是值拷贝,生成了另外一个struct实例。枚举值可以是任何类型的值,可以是int/double/String。

2024-04-24 15:55:12 565

原创 Flutter 开发问题记录(经常更新中)

初次接触Flutter, 在项目中遇到的问题总结。

2023-11-08 11:39:49 1103

原创 android opencv锐化图片

/sigma的值一般用5,15,25。//锐化结束-----------------------------------------//获取文件,转成Mat, Mat在opencv里的概念就相当于图片。当锐化效果不明显, 可多次锐化。就是把锐化结果再次放入锐化函数。2. 用模糊后的图片,加权原图。//把锐化后的Mat转成二进制数据, 返回给前段。图片锐化算法有两步。//模糊图和原图加权。

2023-11-08 09:24:04 239

原创 Flutter 错误使用ParentDataWidget的问题

app启动后,在日志中抛出一个异常:Incorrect use of ParentDataWidget. showing error on the mobile screen. 可是app还是正常启动的,页面也没有问题。但是打出release包后,发现页面是空白的!3. Expanded只能是Colum, Row, Flex的子组件。1. 不能再ListView中使用Spacer Widget。2. 不能再Row和Column使用Position。

2023-04-20 16:59:43 601 1

原创 Flutter知识点(三)修改flutter工程名和包名

修改flutter工程名和包名

2023-03-03 17:21:03 3528

原创 Flutter知识点(二)处理Json

flutter不支持反射,所以本来很简单的事情,一下子变复杂了。当然官方也提供了一些工具来方便开发者。

2023-03-03 17:07:53 1880

原创 Kotlin学习笔记(十三)Flow

Kotin的Flow, 就是Java的RxJava框架, 但是使用更加简洁。 结合协程的作用域,协程被取消时,Flow也会被取消,也能避免内存泄漏。

2023-03-01 15:42:57 306

原创 Android Studio生成类和方法的注释

在类和方法头上自动生成注释

2023-02-23 10:38:44 370

原创 Flutter知识点(一)State到底是什么

setState()其实就是android view的invalidate()方法,而State类的Build()方法就是android view的onDraw()。

2022-11-16 14:59:20 207

原创 Kotlin学习笔记(十二)DataStore的封装

DataStore的封装,满足项目工程使用。点个赞再走!

2022-10-14 11:06:10 1605 3

原创 Kotlin学习笔记(十一)Sealed类和Sealed接口

一种类似于枚举的使用方式。就是Sealed类,但是比枚举类更有扩展性,除了拥有共享属性,还可以持有特征属性。

2022-10-12 15:05:29 1119

原创 Kotlin学习笔记(十)星号(*)的妙用

星号的作用是,在数组对象前加*号可以将数组展开,以方便传值。

2022-10-11 15:20:30 2332

原创 Android的混淆使用方式

虽然现在有App加固的方式,但是商业加固非常贵。所以混淆依旧是非常有用的。

2022-09-23 17:08:37 2262

原创 Android热修复Sophix的使用

了解和使用了下阿里的热修复框架Sophix。

2022-09-21 16:58:38 1180

原创 Android Retrofit处理Token过期的问题

Retrofit处理Token过期的问题

2022-09-07 15:49:09 2813 5

原创 Kotlin学习笔记(八)by的作用,属性委托和类的委托,和Lazy的关系

标题上写了三个话题, 它们是什么关系呢?by关键字用于属性委托和类委托,而Lazy是属性委托的一种优秀应用。

2022-08-26 16:53:32 1121

原创 Kotlin 学习笔记(七)operator约定

约定的意义:就是让函数调用更加简洁。是语法糖的一部分吧。

2022-08-26 15:33:56 1174

原创 Kotlin学习笔记(九)协程简单概念与简单使用

1. 协程,就是任务调度框架,可以在一个线程里调度,也可以在一个线程池里调度。2. Kotlin的协程和RxJava一样的功能。至少协程有的,RxJava都有。3.协程和线程的相同点是,都一个“程”字,也就是说,都是要被执行的代码流。4.Kotlin协程的优点是,以“阻塞式的代码”实现“非阻塞式的代码”。都说比RxJava简单一些。.........

2022-08-26 11:59:45 922

原创 Kotlin学习笔记(五)面向对象编程

Kotlin面向对象编程详解

2022-08-05 10:17:01 437

原创 Kotlin学习笔记(六)作用域函数run,with, apply,also,let,takeIf,takeUnless,repeat

所谓作用域函数:它们的lamda函数作用域===对象类内部作用域。 本篇用实例轻松解释用法。

2022-08-03 16:07:51 678

原创 Android Gradle获取第三方SDK最新版本号

Android Gradle获取第三方SDK最新版本号

2022-07-07 11:48:29 1633

原创 Android 中获取符合分辨率的视频

华为的手机手机上,Width记录的是0, 后来发现还有RESOLUTION这个字段。

2022-06-23 12:54:54 1134

原创 OAuth2.0,CodeChallenge的生成问题

今天在封装OAuth2.0在android端的SDK时,遇到一个CodeChallenge始终不对的问题。在文档中是这么写的:BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))也就是说,CodeChallenge的生成,是在CodeVerifier的SHA256值基础上,再用BASE64URL编码。这里对SHA256的hash值,产生了理解错误。OAuth2.0文档的原意是SHA256的raw byte数组, 不是我们平常用到的对raw byte

2022-03-22 17:40:13 1702

原创 Android 10以上,修改文件属性的问题

前景最近有个需求:PC端传过来的文件,需要保持原来的LastModified time。自然而然的想到了用file.setLastModified(), 实际情况是虽然返回true,但是没有修改成功。一个三星android12的手机除外。通过研究,发现不同厂商,不同android版本, 都有不同表现。总的来说就两个方式:1. Java file APIfile.setLastModified(),从有android开始这个接口就是个废接口。google就没有实现它。所以测试的几款手机除一.

2022-02-11 17:16:28 3420 2

原创 在Linux上安装Nginx步骤及注意事项

最近接到阿里云的整改通知,说我备案的域名需要有一个服务器。但是我的网站本来就是一个静态网页,为了方便直接放在对象存储上了。然后把域名解析到对象存储上。阿里客服说,这样是不行的,原来的对象存储可以一直使用,但是服务器上必须有一个网站可以访问到。不管内容是什么。询问了同事,目前nginx最简单。所以就有了在阿里云服务器上搭nginx的事。1、下载Nginx及相关组件[root@localhost admin]# wget http://nginx.org/download/nginx-1.10

2022-01-19 15:08:47 359

原创 Android存储访问框架的使用

存储访问框架,简称:SAF, 就是系统文件选择器。通常用来选择文件,和Windows的文件选择框一样。其实绝大多数app,都不会使用这个东西,因为太不方便了。图片,视频,普通文件,需要用户去翻文件夹找,这样的用户体验实在太差了。所以大家都是用第三方的或者自己写一个文件选择器。之所以讲SAF,一,是因为Android11以后,使用MediaStore无法访问到非多媒体文件了,需要依赖SAF了。二,外卡和SD卡的操作依赖于存储访问框架授权。打开系统文件选择器与文件过滤 Int

2022-01-14 11:36:54 17875 2

原创 Android的分区存储

外卡(外部存储卷), 只能访问所谓的共享文件夹,或者说公共目录。而且只能访问这些目录的多媒体文件(图片,视频,音频)。

2022-01-12 16:38:54 3763

原创 集成Google广告的一点错误

1. error code 3, no ad config。 你用正式的广告ID, 然后用正式发布版测试。一般就出来了。2. 广告取到了,但是不显示。很大的原因是,广告的父布局容器一开始visibility不可见导致的。父布局容器必须一直可见才行。之所以这样,也很好理解,要不然你可以不显示广告就把钱赚了。...

2021-10-26 10:26:13 725

原创 Kotlin学习笔记(四)泛型

因为Kotlin本质上还是Java, 所以Kotlin的泛型和Java泛型一样都是在编译期擦除类型的。那么Kotlin的泛型做了什么优化呢? 就是针对“协变”,“逆变”,“不变”,这些型变使用做了些许简化。先复习下Java的型变。Java泛型的通配符类型系统有三种基本形态,“协变”,“逆变”,“不变”。如何理解它们要从Java的类型通配符说起。Java泛型的通配符有两种形式:?extends T: 子类型上界限定符,指定类型参数的上限。该类型必须是T或者T的子类型。 ?super

2021-08-23 11:53:22 327

原创 Kotlin学习笔记(三)集合类

不可变List所谓的不可变List就是:list中没有添加删除性质的api。创建不可变List有三个方法,另外创建list的变量不能匿名,因为要指定泛型。listOf(),创建没有元素的空list。返回的是Kotlin的EmptyList类对象。和Java中的EmptyList差不多,只不过泛型是Nothing。 listOf(element:T), 用于创建只有一个元素的List。代码跟下去,会发现调用了java的SingletonList。 listOf(vararg element:T)

2021-08-19 09:58:16 394

原创 Android对渐变颜色的处理

android对颜色渐变的处理和C#WPF很像。先看一下xml的表达:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:type="radial" android:angle="0"

2021-08-18 10:36:57 2336

原创 Kotlin学习笔记(二)基础数据类型与类型系统

Kotlin中所有类型都是引用类型,这点和C#一样。但是java中,基础类型不是引用类型。 Any类, 是所有类型的基类,类似于Java的Object类, 同样有hashcode(),equal(), toString()三个方法。 虽然没有基础数据类型,但是可以理解为是java的装箱类型。在运行时,会被自动优化成java的基础类型。 由于是引用类型,所以那些装箱的基础类型,无法隐式转换。但是每个数字类型都实现了Number接口,可以完成显示转换。 val myInt:Int = 1...

2021-08-12 14:05:32 275 1

原创 Kotlin学习笔记(一) 语言基础

val与var,val就是C# 的readonly 三重引号(“”“)相当于C# 的@”“ 模板表达式:字符串中有${ }, 那么可以在里面写代码。 没有三元运算符,可以用if(a>b) a else b替换。 很怪的用法。if语句成了可以有返回值的方法了。 unit类型 when表达式, 相当于switch case; 最后的else就是default. 更加灵活。in和!in , 用于表达是否在某个集合里面。类型必须和when中输入相同。when(x){ -1,...

2021-08-11 13:35:02 102

原创 Android用热点互传文件的坑

当笔者接到这个需求的时候,下意识的认为,用热点一定可以完成互传。 当然笔者的自信是对的,只是里面有两个坑需要跳过去。1. 热点问题问题出在两个android10及以上手机。 面临的情况如下:1. A手机创建热点, 并且建立一个ServerSocket。B手机连接A手机热点后, 访问A手机的ServerSocket,无法连接上。2. B手机在连接上A手机的热点后,也建立一个ServerSocket。同样,A手机也连接不上B手机的ServerSocket。3. 不过A手机和B手机分别可以访问

2021-08-06 14:43:18 2123

原创 Android View误触的事件怎么过滤

Windows系统的Button,点击后只要事件没有执行结束,再次点击是没有用的。但是Android显然没有做好。那应该怎么做呢?和很多应用的双击后提醒退出Activity一样既然这么简单,还要写这篇文章,是因为我们可以把这个功能封装起来, 以后项目里都可以复用。下面是代码:public abstract class OnFilteredClickListener implements View.OnClickListener { private boolean doublePre

2021-08-05 14:54:48 291

原创 哈夫曼树,哈夫曼编码

基础概念结点的度:二叉树结点的分支数目, 也就是孩子结点的个数。比如,度为1,表示有一个节点; 度为2,表示有两个结点;度为2,表示没有结点。叶子结点度为0,因为没有孩子结点。各种结点个数的关系:假设N0 =叶子结点,度为0的结点总数。N1 =度为1的结点总数。N2 =度为2的结点总数。N=所有结点总数之和。那么有以下公式:所有树:N=N0+N1+N2满二叉树:N1=0, N= 2N0 - 1。 哈夫曼树至少是满二叉树, 或者完全二叉树。权值:每一个叶子结点,都设置一个值,...

2021-08-04 10:12:21 7392

原创 Android VideoView的布局适配

最近有一个需求, 需要在删除前预览一下视频文件。预览区域不大。但是需要能预览所有宽高比例的视频。这就需要针对每一个视频文件,都需要做适配。VideoView和ImageView不一样,ImageView有ScaleType来处理这个问题,但是VideoView不行。完成这个功能需要以下个步骤:1. 获取视频的宽高。 try { MediaMetadataRetriever retriever = new MediaMetadataRetriever()

2021-07-27 13:45:17 1146

原创 解决RecycleView item的点击事件问题

如上图,需要在点击item任何地方都触发事件,然后预览文件。你可能会觉得只要在ViewHolder的itemView上设置事件就可以了。 结果是,空白的地方并且子view没有占用的地方才能触发事件。那么如何实现这个需求呢? 我们需要动点歪脑筋。在正常的item布局基础上,我们再添加如下内容: <View android:id="@+id/layoutEventArea" android:layout_width="ma..

2021-06-30 16:43:45 693

空空如也

空空如也

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

TA关注的人

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