- 博客(133)
- 收藏
- 关注
原创 Android 播放SMB共享视频
表面上看MediaPlayer只能播放本地和http协议视频。没有直接支持smb://协议。那还能播放smb视频呢?也可以的!
2025-01-15 15:16:01
832
原创 Flutter 图片编辑板(二) 拖动位置和对齐线应用
因为对齐线的位置是知道的。经过这种方式,手指抬起时,对齐线对应的位置是不会偏移的。问题根源:由于系统控件(Interactiveviewer)摩擦系数的作用缺陷,导致抬手指时产生的抖动,引起图片几个像素的偏移。从而计算出正确的位置偏移, 把图像拉回到用户希望的位置。图片经过缩放后,事件响应区域会发生变化,所以需要事实的更新事件区域。需求:图片或文字可以在编辑板上随意拖动,当即将到达边缘或者中间位置时,磁吸到目的位置上,并出对齐线。解决方案是,记录手指移动时产生的事件坐标点, 最多纪录十个。
2024-12-09 16:49:57
294
原创 Flutter 图片编辑板(一) 事件路由
在图片编辑板上, 会有多个内容相,图片或文字(添加文字目前还没做过)。这就牵扯到事件问题。因为InteractiveViewer的大小是覆盖真个编辑板的,虽然看到的内容项小,其实是占用了所有编辑板的。每一个内容项是被InteractiveViewer修饰的widget,具有缩放偏移的功能。2. 实时计算每一个内容项的事件区域,或者说在编辑板所占位置大小,也就是一个Rect对象。3. 根据点击的事件位置,路由的遍历每一个内容项,查看是否命中,命中就返回事件给这个内容项。这就需要我们重新实现编辑板的事件路由。
2024-12-09 16:46:34
436
原创 flutter背景贴图的困难总结
用canvas完成缩放,平移,这是最基本的常识。而我一开始却偏偏没那么做。走上歧途的原因是,觉得canvas的大小是有前景图决定的,对前景图放大缩小,和对背景图没有关系。实际上用前景图的大小调canvas.saveLayer(), 可以再次扩大canvas。这个坑,等后面采用canvas缩放策略的时候,还会遇到。UI上取得平移位置距离,是UI上view的, 并不是真实图片上的平移动,这是两回事,需要做好转换。一开始就走上了自己处理缩放,平移的道路了。可是怎么也处理不好。直接处理canvas。
2024-07-05 15:24:38
424
原创 Flutter InteractiveViewer CustomPaint的使用总结
drawPath方法在缩放的情况下,有性能问题,卡帧,掉帧,甚至crash。最近产品上有个图片编辑的需求,需要对编辑区域做放大和缩小, 以方便用户编辑图片。这期间遇到几个问题。多了同样会有性能问题,卡帧,掉帧,甚至crash。在缩放时,CustomPaint会反复刷新,尽可能避免不必要的刷新。做到在缩放时不刷新,在编辑时刷新。如果只是单纯的缩放,没有对缩放的内容进行改变和更新, 那么基本没啥问题。区域缩放后,手指点击的区域和原图编辑区域,这儿有个映射关系。下面都是针对CustomPaint缩放导致的问题。
2024-06-12 09:40:23
811
原创 swift语言学习总结
在父类初始化方法调用之后,在子类构造器中给父类的属性赋值时,会调用父类属性的 willSet 和 didSet 观察器。枚举关联值,这个功能很好,就是附带信息用的。15.数组修改,追加append, 删除remove, 追加另外一个数组+=, 插入insert, 判空isEmpty。闭包逃逸,就是说闭包传到函数里面,但是没有执行闭包, 只是把闭包引用给了别人。struct是值类型,所以赋值的时候是值拷贝,生成了另外一个struct实例。枚举值可以是任何类型的值,可以是int/double/String。
2024-04-24 15:55:12
648
原创 android opencv锐化图片
/sigma的值一般用5,15,25。//锐化结束-----------------------------------------//获取文件,转成Mat, Mat在opencv里的概念就相当于图片。当锐化效果不明显, 可多次锐化。就是把锐化结果再次放入锐化函数。2. 用模糊后的图片,加权原图。//把锐化后的Mat转成二进制数据, 返回给前段。图片锐化算法有两步。//模糊图和原图加权。
2023-11-08 09:24:04
343
原创 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
788
1
原创 Kotlin学习笔记(十三)Flow
Kotin的Flow, 就是Java的RxJava框架, 但是使用更加简洁。 结合协程的作用域,协程被取消时,Flow也会被取消,也能避免内存泄漏。
2023-03-01 15:42:57
382
原创 Flutter知识点(一)State到底是什么
setState()其实就是android view的invalidate()方法,而State类的Build()方法就是android view的onDraw()。
2022-11-16 14:59:20
256
原创 Kotlin学习笔记(十一)Sealed类和Sealed接口
一种类似于枚举的使用方式。就是Sealed类,但是比枚举类更有扩展性,除了拥有共享属性,还可以持有特征属性。
2022-10-12 15:05:29
1178
原创 Kotlin学习笔记(八)by的作用,属性委托和类的委托,和Lazy的关系
标题上写了三个话题, 它们是什么关系呢?by关键字用于属性委托和类委托,而Lazy是属性委托的一种优秀应用。
2022-08-26 16:53:32
1183
原创 Kotlin学习笔记(九)协程简单概念与简单使用
1. 协程,就是任务调度框架,可以在一个线程里调度,也可以在一个线程池里调度。2. Kotlin的协程和RxJava一样的功能。至少协程有的,RxJava都有。3.协程和线程的相同点是,都一个“程”字,也就是说,都是要被执行的代码流。4.Kotlin协程的优点是,以“阻塞式的代码”实现“非阻塞式的代码”。都说比RxJava简单一些。.........
2022-08-26 11:59:45
998
原创 Kotlin学习笔记(六)作用域函数run,with, apply,also,let,takeIf,takeUnless,repeat
所谓作用域函数:它们的lamda函数作用域===对象类内部作用域。 本篇用实例轻松解释用法。
2022-08-03 16:07:51
709
原创 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
1885
原创 Android 10以上,修改文件属性的问题
前景最近有个需求:PC端传过来的文件,需要保持原来的LastModified time。自然而然的想到了用file.setLastModified(), 实际情况是虽然返回true,但是没有修改成功。一个三星android12的手机除外。通过研究,发现不同厂商,不同android版本, 都有不同表现。总的来说就两个方式:1. Java file APIfile.setLastModified(),从有android开始这个接口就是个废接口。google就没有实现它。所以测试的几款手机除一.
2022-02-11 17:16:28
3623
2
原创 在Linux上安装Nginx步骤及注意事项
最近接到阿里云的整改通知,说我备案的域名需要有一个服务器。但是我的网站本来就是一个静态网页,为了方便直接放在对象存储上了。然后把域名解析到对象存储上。阿里客服说,这样是不行的,原来的对象存储可以一直使用,但是服务器上必须有一个网站可以访问到。不管内容是什么。询问了同事,目前nginx最简单。所以就有了在阿里云服务器上搭nginx的事。1、下载Nginx及相关组件[root@localhost admin]# wget http://nginx.org/download/nginx-1.10
2022-01-19 15:08:47
377
原创 Android存储访问框架的使用
存储访问框架,简称:SAF, 就是系统文件选择器。通常用来选择文件,和Windows的文件选择框一样。其实绝大多数app,都不会使用这个东西,因为太不方便了。图片,视频,普通文件,需要用户去翻文件夹找,这样的用户体验实在太差了。所以大家都是用第三方的或者自己写一个文件选择器。之所以讲SAF,一,是因为Android11以后,使用MediaStore无法访问到非多媒体文件了,需要依赖SAF了。二,外卡和SD卡的操作依赖于存储访问框架授权。打开系统文件选择器与文件过滤 Int
2022-01-14 11:36:54
18908
2
原创 Android的分区存储
外卡(外部存储卷), 只能访问所谓的共享文件夹,或者说公共目录。而且只能访问这些目录的多媒体文件(图片,视频,音频)。
2022-01-12 16:38:54
3853
原创 集成Google广告的一点错误
1. error code 3, no ad config。 你用正式的广告ID, 然后用正式发布版测试。一般就出来了。2. 广告取到了,但是不显示。很大的原因是,广告的父布局容器一开始visibility不可见导致的。父布局容器必须一直可见才行。之所以这样,也很好理解,要不然你可以不显示广告就把钱赚了。...
2021-10-26 10:26:13
780
原创 Kotlin学习笔记(四)泛型
因为Kotlin本质上还是Java, 所以Kotlin的泛型和Java泛型一样都是在编译期擦除类型的。那么Kotlin的泛型做了什么优化呢? 就是针对“协变”,“逆变”,“不变”,这些型变使用做了些许简化。先复习下Java的型变。Java泛型的通配符类型系统有三种基本形态,“协变”,“逆变”,“不变”。如何理解它们要从Java的类型通配符说起。Java泛型的通配符有两种形式:?extends T: 子类型上界限定符,指定类型参数的上限。该类型必须是T或者T的子类型。 ?super
2021-08-23 11:53:22
375
原创 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
453
原创 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
2448
原创 Kotlin学习笔记(二)基础数据类型与类型系统
Kotlin中所有类型都是引用类型,这点和C#一样。但是java中,基础类型不是引用类型。 Any类, 是所有类型的基类,类似于Java的Object类, 同样有hashcode(),equal(), toString()三个方法。 虽然没有基础数据类型,但是可以理解为是java的装箱类型。在运行时,会被自动优化成java的基础类型。 由于是引用类型,所以那些装箱的基础类型,无法隐式转换。但是每个数字类型都实现了Number接口,可以完成显示转换。 val myInt:Int = 1...
2021-08-12 14:05:32
316
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
119
原创 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
2346
原创 Android View误触的事件怎么过滤
Windows系统的Button,点击后只要事件没有执行结束,再次点击是没有用的。但是Android显然没有做好。那应该怎么做呢?和很多应用的双击后提醒退出Activity一样既然这么简单,还要写这篇文章,是因为我们可以把这个功能封装起来, 以后项目里都可以复用。下面是代码:public abstract class OnFilteredClickListener implements View.OnClickListener { private boolean doublePre
2021-08-05 14:54:48
359
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人