- 博客(73)
- 资源 (4)
- 收藏
- 关注
原创 没错,我给androidx修了一个bug!
还有就是在选择code reviewer可能需要注意一下,能多选几个就多选几个吧,我选择了一个对appcompat贡献最多的一个老哥,结果到现在都还在pending review状态,期间都打算发邮件去沟通一下了,我看其他的pr都是同时选择了好几个code reviewer,最后还是在。创建一个issue,这一点很坑,我从它这链接点进去,说我没有create issue的权限,我还以为不用完成这一步,这也导致了最开始这个pr搁置了很久也没人来code review。添加的,这样就不好写单元测试了。
2024-09-22 22:01:08 1358
原创 Jetpack Compose Side Effects in Details 副作用的详细信息
在右侧的 Launched Effect 示例中,重组不受重组状态的影响,仅在第一次加载屏幕时才会发出请求。当您需要在 Jetpack Compose 组件中启动和管理协程时,这特别有用,确保在从 UI 层次结构中删除 Composable 时适当地取消它们。当您需要处理在合成过程中可能发生变化的某些状态的快照时,它特别有用。在非 UI 相关的状态更改中,我们的屏幕可能会进行不必要的重组。Disposable Effect 在首次创建可组合函数时触发,然后用于在可组合函数从屏幕上移除时释放其使用的资源。
2024-09-13 10:19:15 1050
原创 [译]-Jetpack Compose Side Effects in Details
在右侧的 Launched Effect 示例中,重组不受重组状态的影响,仅在第一次加载屏幕时才会发出请求。当您需要在 Jetpack Compose 组件中启动和管理协程时,这特别有用,确保在从 UI 层次结构中删除 Composable 时适当地取消它们。当您需要处理在合成过程中可能发生变化的某些状态的快照时,它特别有用。在非 UI 相关的状态更改中,我们的屏幕可能会进行不必要的重组。Disposable Effect 在首次创建可组合函数时触发,然后用于在可组合函数从屏幕上移除时释放其使用的资源。
2024-09-13 10:17:15 934
原创 [译]-Kotlin Tips : Keep Your Code Clean - Kotlin技巧:保证你的代码整洁。
作为开发人员,干净且可维护的代码是关键。在这篇文章中,我们将探讨一些有价值的技巧来帮助您实现更清晰的代码库。
2024-09-12 13:56:01 463
原创 [译] - Jetpack Compose: Best Practices 最佳实践
Use theModifier使用Modifier类创建自定义修饰符。Use thethen使用then函数将多个修饰符链接在一起。Text(",[原文链接](
2024-09-08 16:12:30 925
原创 可能是支持属性最多的类似验证码的输入控件了。一个超好用的验证码,卡号,车牌号,IP地址-输入控件 - 掘金
可能是支持属性最多的类似验证码的输入控件了。
2024-09-01 15:21:53 505
原创 编译可执行命令的FFmpeg
上面的例子并不是一个完善的工具类,比如缺少Native层的线程支持,出现错误就会直接闪退,缺少进度回调等,所以还是直接使用现成的轮子比较靠谱,只是我们需要知道轮子大概是怎么造出来的就行了。然后如何执行命令行工具的博客,但是其实这只是个Demo而已,因为有很多细节需要处理,推荐直接使用开源库。就可以直接找到所有的头文件,然后将ffmpeg的源码和自己写的工具类源码关联起来就行了。目录下生产对应的头文件,动态库,以及aar文件,直接拿来用就可以了。,注释掉退出程序的代码,并且增加一个int的返回值。
2024-09-01 15:18:32 999
原创 获取视频封面图Bitmap
我坑,之前手打代码过快,导致生成的Bitmap颜色显示一直都不对,找了好久都没发现错误在哪里,还是百度到了一篇博主也是犯了同样的错误,这就是人的固化思维啊!这是学习ffmpeg的第二篇博客,主要是使用ffmpeg获取本地视频文件的第一帧数据转换为Bitmap,然后抛给上层ImageView显示。函数读取视频流信息,并将其存放到 AVPacket 结构的 pkt 变量中,这里我们只需分配 AVPacket 结构体的内存,数据。的函数绑定像素指针的地址,使用libyuv中的。标志位用于判断这一过程。
2024-09-01 15:15:30 1118
原创 编译FFmpeg动态库
如果同时引用很多动态库,那就要写很多的重复配置,我们完全可以使用下面的方式简写配置。或者也可以将所有动态库合并成一个动态库。脚本,等待脚本执行完成,执行过程可能会遇到缺少组件的问题,按需解决。下载FFmpeg4.3源代码,进入源码目录创建。指令时要特别注意自己要使用的编译器是。shell脚本语言不熟的可以查看我的。脚本,ffmpeg从4.0起新增了。编译工具集,而是在上层目录中。的错误,就自行到相应目录查看。还有个我遇到的问题就是在。,而新版的ndk已经用。更多构建参数可以使用。文件夹,将头文件方法。
2024-09-01 15:09:44 1121
原创 EventBus搭配LifeCycle可能更美味
当这个类不需要通知监听时,删除也挺麻烦的。所以很多人可能投向了。LifeCycle:JetPack库中一个能感知生命周期的组件。Kotlin扩展函数:可以为已经存在的类添加新的方法的黑魔法。EventBus:一个用来在组件之间发通知通信的开源库。时,我们每次在需要接受通知的地方,都需要。其他生命周期实现类似,具体可看源码实现。搭配上了,注册函数可以怎么写呢?给EventBus添加扩展函数。EventBus监听,并在。在对应的生命周期函数中添加。这就简单多了,对吧!不怎么会的可以直接看。
2024-09-01 15:06:29 258
原创 学会自定义LayoutManager
刚开始看的时候觉得还是那么回事,但是在慢慢的深入LayoutManager源码才发现很多的文章其实都是不合格,乃至可以说是很误导人的,所以我才想自己写一篇关于自定义LayoutManager的文章,希望能帮助到一部分人能入门自定义LayoutManager吧。
2024-09-01 15:03:27 1112
原创 实现一个能设置MaxLine的LayoutManager
有时候,我们会遇到这种需求:一个线性的列表布局,当item量很少的时候,就是。代码很简单,应该不加注释也能看懂。如果看不懂的可以去看看我之前的那篇分析。那么为什么会造成这种原因呢?,让其变成可滑动展示更多的item。所以我们第一个想法就是用。直接展示完所有item,但是当item数量超过某个数时就要。所以实现思路就很简单了:设定一个。
2024-08-31 19:15:40 313
原创 自定义全局异常捕获-SpiderMan
如何自定义一个全局异常捕获器-SpiderMan一图胜前言上图中,我们模拟了NullPointerException的发生,系统捕获了该异常,并用一个界面展示了出来。如何实现想要实现全局异常的捕获我们需要了解Thead中的一个内部接口UncaughtExceptionHandler,该接口在JDK1.5中被添加。所有我们需要自定义一个类去实现该接口,并且设置给Thread的Defaul...
2019-01-09 14:56:10 1054
原创 Android Studio找不到navigation标签的解决办法
最近在学习JetPack-Navigation组件的使用,但是在AS中能新建navigation的文件夹却不能新建navigation的xml文件,于是上Stack Overflow找了一下解决办法还真找到了。解决办法找到Settings(Mac是Preferences)中的Experimental选项,选中Enable Navigation Editor选项,然后重启。...
2018-11-20 11:48:28 2893
原创 MacOS 10.10 以上解决机械键盘按键无法识别
MacOS 10.10 以上解决机械键盘按键无法识别题主的配置是 MacBook Pro ,系统10.13,机械键盘高斯87以前装的黑苹果,系统10.10,机械键盘可以完美使用,但是现在用了MacBook Pro机械键盘确有几个键无法识别出来,就是按了没有反应,这几个可恶的键就是”Esc”,”BackSpace”,”Tab”和”Space”,使用Karabiner-EventView可以看...
2018-08-15 21:26:12 26034 2
原创 Android使用cmake+ndk输出原生Log
Android使用cmake+ndk输出原生Log我们可以在c/cpp代码中用print函数输出log信息,但是这样在logcat并不会显示,好在Android已经给我提供了相应的方法解决这个问题:使用log.h头文件开始创建一个新的Android Studio的工程项目勾选Include C++ support选项然后就是一路next直到创建项目成功项目结构生...
2018-08-15 11:52:47 5761
原创 自定义SnackBar
前言我浏览material.io网站时,从所谓的“Material Design 2”中找到一些新的组件,并发现Snackbar已经改变了,它不再占用整个屏幕长度,并且周围会有一个间距。但我并没有从Support Library的alpha版本中找到它,所以我决定自己实现一下。1、创建Drawable文件<shape xmlns:android="http://s...
2018-07-10 16:52:07 2249
原创 Android架构组件—ViewModel
探索Android架构模式中ViewModel前言我们中的大多数人都遇到过旋转手机并且应用程序崩溃或UI失去状态的问题。解决它最简单的办法就是配置Activity为potrait模式,但这是一个很糟糕的做法。幸运的是,Android团队在2017年Google I / O期间发布了ViewModel。该ViewModel类被设计用来保存与UI相关的数据并且它是可以感知生命周...
2018-06-28 11:59:00 2907 1
原创 Android架构组件—LiveData
Android架构组件—LiveData前言LiveData 是一个可以保存数据和观察数据变化的组件。他是被设计用来在ViewModel中保存数据,但是同样也可以在应用的其他地方使用。LiveData使用观察者模式监听数据的改变。这与RxJava的Observable非常类似,但是LiveData不止于此,LiveData是具有生命周期感知能力的。简单的说,LiveData...
2018-06-28 11:58:30 2208 1
原创 Android架构组件(Architecture Components)介绍
Android架构组件(Architecture Components)介绍为什么需要架构组件 之前有多少人是把所有代码都写在 Activity里面?几乎每个人都干过一次,对吧!Android 框架层面上允许自由的做到上面这点,但是后来我们意识到了这么做会带来的问题,这使得我们的代码变得臃肿不堪,难以维护。所以才出现了像mvp,mvvm这样不同的架构模式,这使得我们可以编写更...
2018-06-28 11:58:05 1400
原创 使用Gradle和Kotlin组织Android的资源文件
使用Gradle和Kotlin组织Android的资源文件前言如果您已经开发了3年或4年的App应用程序,那么您可能会注意到资源文件夹是如何变得混乱不堪的。尽管大多数开发人员会专注于组织他们的Java / Kotlin文件(通过功能或屏幕),但资源文件通常无人看管。尝试减少混乱的一个尝试是使用文件的命名约定。例如,在一些使用的布局文件中:activity_*.xmlfragment_*.xml
2018-04-20 16:33:55 1308
原创 Android Material Buttons
前言Google Material Design 的文档中提到:“当按钮被触摸时应该给与用户相应的反馈”,现在有了compat支持库实现这种效果将会非常简单。添加资源将最新的appcompat库添加到您的项目中dependencies { //replace X.X.X with the latest version compile 'com.android.support:appc
2018-04-19 20:01:35 1917
原创 约束布局(ConstraintLayout)1.1.0的新特性
约束布局(ConstraintLayout)1.1.0的新特性约束布局无疑是最适合构建响应式用户界面的布局-根据屏幕大小自动调整的布局。很高兴ConstraintLayout发布了1.1.0版本,1.1.0的这些新特性让ConstraintLayout能够做出更好的工作,并且不丢失原有的特性。圆形定位(Circular Positioning)当一个View需要根据另一个View进行定位时,该角度和
2018-04-19 12:56:29 1867 3
原创 优化嵌套的RecyclerView
优化嵌套的RecyclerViewRecyclerView是ListView的更高级版本,它重用相同的视图以防止额外创建视图以提供平滑的滚动体验。RecyclerView通过保持视图池来实现这一点,该视图池包含不再可见并且可以回收的视图。有时我们需要嵌套RecyclerView来创建一些布局。考虑在垂直方向RecyclerView内部有水平RecyclerView的情况。在上图可以...
2018-04-10 10:39:51 3899 3
原创 从Java切换到Kotlin:5个令Android开发者兴奋的特征
1.命名参数每个Java开发者的噩梦:大量的参数(例如在Cursors或Android中创建SQLite查询),它们的名字和方法定义中的顺序。如果没有文档或IDE帮助,您无法在Java中正确编写它@Overridepublic Loader<Cursor> onCreateLoader(int i, Bundle bundle) { return new Curs...
2018-04-10 10:36:08 515
原创 ViewDragHelper简解
ViewDragHelper简解概述ViewDragHelper是一个用于编写自定义视图组的实用程序类。它提供了许多有用的操作和状态跟踪,允许用户在其父视图组中拖动和重新定位视图。(ps:来自官方注释)简单入门创建ViewDragHelper的实例回调相关触摸的方法public class DragLayout extends LinearLayout { private ViewDra
2018-03-01 21:21:36 204
原创 关闭Android Studio自动折叠方法
关闭Android Studio自动折叠方法方法自动折叠是这个样子 取消自动折叠,取消Method bodies的勾选即可
2017-12-29 00:06:55 4464
原创 Android架构组件Room的使用
Android架构组件Room的使用Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错的。Room有3个主要组件Database :数据库Entity : 代表数据库一个表结构Dao : 包含访问数据库的方法简单使用添加Google Maven仓库allprojects {
2017-12-26 18:42:48 13203 1
原创 kotlin使用Parcelize注解简化Parcelable的书写
kotlin使用Parcelize注解简化Parcelable的书写Parcelize注解kotlin在1.1.4版本增加了对parcelable的支持Android扩展插件现在包含一个实现了Parcelable的自动生成器。在主构造函数中声明序列化的属性并添加一个@Parcelize注解,生成器就会自动创建writeToParcel()/ createFromParcel()方法需求环境Kotli
2017-12-05 11:58:27 7349
原创 JNI 动态注册
public class MainActivity extends AppCompatActivity { // 加载so static { System.loadLibrary("native-lib"); } @Override protected void onCreate(Bundle savedInstanceState) {
2017-11-11 14:50:23 365
原创 Vysor 破解
分析源代码可知软件在uglify-list.js文件内通过_il变量判断是否注册成功, 于是配置该变量为true,打开 uglify.js文件, 搜索 _il变量, 将 _il:Te.a() 替换为 _il:true, 然后重启chrome和vysor. 发现Vysory已经变为专业版了。uglify.js文件在chrome的Extensions文件夹下,可以用开发者模式先找到扩展的id。然后到这个
2017-03-13 15:44:12 4542
原创 RxJava常用操作符
常用操作符 http://reactivex.io/documentation/operators.html#alphabetical创建操作用于创建Observable(被观察者)的操作符Create(创建) — 通过调用观察者(observer)的方法从头开始创建一个ObservableDefer(推迟) — 在观察者订阅之前不创建这个Observable,为每一个观察者创建一个新的O
2017-03-03 09:37:53 1472
原创 AndroidStudio Jni 开发初识
NDK 是什么?NDK是一系列工具的集合,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk为什么使用NDK代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。开始使用下载ndk环
2017-01-13 16:55:48 302
原创 在自定义view中画 .9 的Bitmap
//加载点9位图 NinePatchDrawable npd = (NinePatchDrawable) getResources() .getDrawable(R.drawable.xxxx); //设置需要的范围边界 Rect rect = new Rect(left, top,top, bottom); npd.se
2017-01-10 16:44:52 768
原创 Android 发布Library到Jcenter
前言习惯了 compile ‘com.android.support:appcompat-v7:24.2.1’ 这种依赖第三方库的方式,简直不要太爽。那为什么这么一句话就可以引入一个第三方库呢?这全是Jcenter的功劳,Jcenter不知道是什么?那真的可以自己Google一下了。 现在我们自己尝试一下把自己的Library上传到Jcenter,这里我用自己以前开源的项目Updater当例子来试
2016-12-30 15:23:04 478
原创 JavePoet 初体验
前言javapoet是square公司旗下的一款开源项目,旨在用java api 生成.java源代码文件,英语好的同学可以直接移步该项目的gayhub地址。 https://github.com/square/javapoet举个例子假如要生成类似这样的一个文件package com.simple;import java.lang.String;impor
2016-11-03 10:47:45 449
原创 Android Studio 布局中引用自定义属性不提示的问题
Eclipse里面自定义属性的命名空间的声明一般都是xmlns:app="http://schemas.android.com/apk/res/com.xxx(包名)而Android Studio里面的命名空间声明则是xmlns:app="http://schemas.android.com/apk/res-auto但是在布局中使用自定义属性时发现并不会自动提示声明好的属性,一直困惑了很久才发现自定
2016-10-12 17:34:33 7987 7
原创 ViewPageerTransform深入理解,给viewpager切换加动画
ViewPagerTransforms的深入理解每当viewpager上一个可见或依附的页面发生了滚动事件就会调用PageTransformer,这让应用可以使用自定义transformation让viewpager某一个页面视图上实现某些特定的动画属性。但是这样的属性动画只能支持到android3.0版本或以上,在早期的版本上设置viewpager的PageTransformer会被忽略。公有方法
2016-08-20 23:02:27 9796 4
原创 使用Android Support Annotations优化你的代码
Android Support Annotations提供的注解允许你想lint检查那样提供一些提示在代码审查上,可以帮助你解决一些难以发现的代码问题。添加依赖选择File > Project Structure点击Dependencies标签点击“+”按钮然后选择Library dependency那项在弹出的选择框选择support-annotations然后点击o
2016-08-16 11:54:19 2976
原创 Git 常用命令
查看、添加、提交、删除、找回,重置修改文件显示command的help git help command显示提交内容 git show 显示某次提交的内容 git show $id抛弃工作区某个文件的修改 git co – filename抛弃工作区所以文件的修改 git co . 将工作文件的修改提交到本地暂存区 git add filename 将所有修改过的工作文
2016-08-12 16:46:29 297
HiJson解析器
2015-08-28
sublimeText
2015-08-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人