自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

simplepeng的博客

爱编程,爱折腾,Enjoy the Development

  • 博客(72)
  • 资源 (4)
  • 收藏
  • 关注

原创 Jetpack Compose Side Effects in Details 副作用的详细信息

在右侧的 Launched Effect 示例中,重组不受重组状态的影响,仅在第一次加载屏幕时才会发出请求。当您需要在 Jetpack Compose 组件中启动和管理协程时,这特别有用,确保在从 UI 层次结构中删除 Composable 时适当地取消它们。当您需要处理在合成过程中可能发生变化的某些状态的快照时,它特别有用。在非 UI 相关的状态更改中,我们的屏幕可能会进行不必要的重组。Disposable Effect 在首次创建可组合函数时触发,然后用于在可组合函数从屏幕上移除时释放其使用的资源。

2024-09-13 10:19:15 1015

原创 [译]-Jetpack Compose Side Effects in Details

在右侧的 Launched Effect 示例中,重组不受重组状态的影响,仅在第一次加载屏幕时才会发出请求。当您需要在 Jetpack Compose 组件中启动和管理协程时,这特别有用,确保在从 UI 层次结构中删除 Composable 时适当地取消它们。当您需要处理在合成过程中可能发生变化的某些状态的快照时,它特别有用。在非 UI 相关的状态更改中,我们的屏幕可能会进行不必要的重组。Disposable Effect 在首次创建可组合函数时触发,然后用于在可组合函数从屏幕上移除时释放其使用的资源。

2024-09-13 10:17:15 902

原创 [译]-Kotlin Tips : Keep Your Code Clean - Kotlin技巧:保证你的代码整洁。

作为开发人员,干净且可维护的代码是关键。在这篇文章中,我们将探讨一些有价值的技巧来帮助您实现更清晰的代码库。

2024-09-12 13:56:01 436

原创 [译] - Jetpack Compose: Best Practices 最佳实践

Use theModifier使用Modifier类创建自定义修饰符。Use thethen使用then函数将多个修饰符链接在一起。Text(",[原文链接](

2024-09-08 16:12:30 884

原创 可能是支持属性最多的类似验证码的输入控件了。一个超好用的验证码,卡号,车牌号,IP地址-输入控件 - 掘金

可能是支持属性最多的类似验证码的输入控件了。

2024-09-01 15:21:53 487

原创 编译可执行命令的FFmpeg

上面的例子并不是一个完善的工具类,比如缺少Native层的线程支持,出现错误就会直接闪退,缺少进度回调等,所以还是直接使用现成的轮子比较靠谱,只是我们需要知道轮子大概是怎么造出来的就行了。然后如何执行命令行工具的博客,但是其实这只是个Demo而已,因为有很多细节需要处理,推荐直接使用开源库。就可以直接找到所有的头文件,然后将ffmpeg的源码和自己写的工具类源码关联起来就行了。目录下生产对应的头文件,动态库,以及aar文件,直接拿来用就可以了。,注释掉退出程序的代码,并且增加一个int的返回值。

2024-09-01 15:18:32 964

原创 获取视频封面图Bitmap

我坑,之前手打代码过快,导致生成的Bitmap颜色显示一直都不对,找了好久都没发现错误在哪里,还是百度到了一篇博主也是犯了同样的错误,这就是人的固化思维啊!这是学习ffmpeg的第二篇博客,主要是使用ffmpeg获取本地视频文件的第一帧数据转换为Bitmap,然后抛给上层ImageView显示。函数读取视频流信息,并将其存放到 AVPacket 结构的 pkt 变量中,这里我们只需分配 AVPacket 结构体的内存,数据。的函数绑定像素指针的地址,使用libyuv中的。标志位用于判断这一过程。

2024-09-01 15:15:30 1086

原创 编译FFmpeg动态库

如果同时引用很多动态库,那就要写很多的重复配置,我们完全可以使用下面的方式简写配置。或者也可以将所有动态库合并成一个动态库。脚本,等待脚本执行完成,执行过程可能会遇到缺少组件的问题,按需解决。下载FFmpeg4.3源代码,进入源码目录创建。指令时要特别注意自己要使用的编译器是。shell脚本语言不熟的可以查看我的。脚本,ffmpeg从4.0起新增了。编译工具集,而是在上层目录中。的错误,就自行到相应目录查看。还有个我遇到的问题就是在。,而新版的ndk已经用。更多构建参数可以使用。文件夹,将头文件方法。

2024-09-01 15:09:44 1006

原创 EventBus搭配LifeCycle可能更美味

当这个类不需要通知监听时,删除也挺麻烦的。所以很多人可能投向了。LifeCycle:JetPack库中一个能感知生命周期的组件。Kotlin扩展函数:可以为已经存在的类添加新的方法的黑魔法。EventBus:一个用来在组件之间发通知通信的开源库。时,我们每次在需要接受通知的地方,都需要。其他生命周期实现类似,具体可看源码实现。搭配上了,注册函数可以怎么写呢?给EventBus添加扩展函数。EventBus监听,并在。在对应的生命周期函数中添加。这就简单多了,对吧!不怎么会的可以直接看。

2024-09-01 15:06:29 244

原创 学会自定义LayoutManager

刚开始看的时候觉得还是那么回事,但是在慢慢的深入LayoutManager源码才发现很多的文章其实都是不合格,乃至可以说是很误导人的,所以我才想自己写一篇关于自定义LayoutManager的文章,希望能帮助到一部分人能入门自定义LayoutManager吧。

2024-09-01 15:03:27 1081

原创 实现一个能设置MaxLine的LayoutManager

有时候,我们会遇到这种需求:一个线性的列表布局,当item量很少的时候,就是。代码很简单,应该不加注释也能看懂。如果看不懂的可以去看看我之前的那篇分析。那么为什么会造成这种原因呢?,让其变成可滑动展示更多的item。所以我们第一个想法就是用。直接展示完所有item,但是当item数量超过某个数时就要。所以实现思路就很简单了:设定一个。

2024-08-31 19:15:40 300

原创 自定义全局异常捕获-SpiderMan

如何自定义一个全局异常捕获器-SpiderMan一图胜前言上图中,我们模拟了NullPointerException的发生,系统捕获了该异常,并用一个界面展示了出来。如何实现想要实现全局异常的捕获我们需要了解Thead中的一个内部接口UncaughtExceptionHandler,该接口在JDK1.5中被添加。所有我们需要自定义一个类去实现该接口,并且设置给Thread的Defaul...

2019-01-09 14:56:10 1036

原创 Android Studio找不到navigation标签的解决办法

最近在学习JetPack-Navigation组件的使用,但是在AS中能新建navigation的文件夹却不能新建navigation的xml文件,于是上Stack Overflow找了一下解决办法还真找到了。解决办法找到Settings(Mac是Preferences)中的Experimental选项,选中Enable Navigation Editor选项,然后重启。...

2018-11-20 11:48:28 2842

原创 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 25888 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 5691

原创 自定义SnackBar

前言我浏览material.io网站时,从所谓的“Material Design 2”中找到一些新的组件,并发现Snackbar已经改变了,它不再占用整个屏幕长度,并且周围会有一个间距。但我并没有从Support Library的alpha版本中找到它,所以我决定自己实现一下。1、创建Drawable文件<shape xmlns:android="http://s...

2018-07-10 16:52:07 2232

原创 Android架构组件—ViewModel

探索Android架构模式中ViewModel前言我们中的大多数人都遇到过旋转手机并且应用程序崩溃或UI失去状态的问题。解决它最简单的办法就是配置Activity为potrait模式,但这是一个很糟糕的做法。幸运的是,Android团队在2017年Google I / O期间发布了ViewModel。该ViewModel类被设计用来保存与UI相关的数据并且它是可以感知生命周...

2018-06-28 11:59:00 2890 1

原创 Android架构组件—LiveData

Android架构组件—LiveData前言LiveData 是一个可以保存数据和观察数据变化的组件。他是被设计用来在ViewModel中保存数据,但是同样也可以在应用的其他地方使用。LiveData使用观察者模式监听数据的改变。这与RxJava的Observable非常类似,但是LiveData不止于此,LiveData是具有生命周期感知能力的。简单的说,LiveData...

2018-06-28 11:58:30 2179 1

原创 Android架构组件(Architecture Components)介绍

Android架构组件(Architecture Components)介绍为什么需要架构组件 之前有多少人是把所有代码都写在 Activity里面?几乎每个人都干过一次,对吧!Android 框架层面上允许自由的做到上面这点,但是后来我们意识到了这么做会带来的问题,这使得我们的代码变得臃肿不堪,难以维护。所以才出现了像mvp,mvvm这样不同的架构模式,这使得我们可以编写更...

2018-06-28 11:58:05 1383

原创 使用Gradle和Kotlin组织Android的资源文件

使用Gradle和Kotlin组织Android的资源文件前言如果您已经开发了3年或4年的App应用程序,那么您可能会注意到资源文件夹是如何变得混乱不堪的。尽管大多数开发人员会专注于组织他们的Java / Kotlin文件(通过功能或屏幕),但资源文件通常无人看管。尝试减少混乱的一个尝试是使用文件的命名约定。例如,在一些使用的布局文件中:activity_*.xmlfragment_*.xml

2018-04-20 16:33:55 1288

原创 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 1901

原创 约束布局(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 1846 3

原创 优化嵌套的RecyclerView

优化嵌套的RecyclerViewRecyclerView是ListView的更高级版本,它重用相同的视图以防止额外创建视图以提供平滑的滚动体验。RecyclerView通过保持视图池来实现这一点,该视图池包含不再可见并且可以回收的视图。有时我们需要嵌套RecyclerView来创建一些布局。考虑在垂直方向RecyclerView内部有水平RecyclerView的情况。在上图可以...

2018-04-10 10:39:51 3886 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 499

原创 ViewDragHelper简解

ViewDragHelper简解概述ViewDragHelper是一个用于编写自定义视图组的实用程序类。它提供了许多有用的操作和状态跟踪,允许用户在其父视图组中拖动和重新定位视图。(ps:来自官方注释)简单入门创建ViewDragHelper的实例回调相关触摸的方法public class DragLayout extends LinearLayout { private ViewDra

2018-03-01 21:21:36 193

原创 关闭Android Studio自动折叠方法

关闭Android Studio自动折叠方法方法自动折叠是这个样子 取消自动折叠,取消Method bodies的勾选即可

2017-12-29 00:06:55 4418

原创 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 13184 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 7326

原创 JNI 动态注册

public class MainActivity extends AppCompatActivity { // 加载so static { System.loadLibrary("native-lib"); } @Override protected void onCreate(Bundle savedInstanceState) {

2017-11-11 14:50:23 350

原创 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 4506

原创 RxJava常用操作符

常用操作符 http://reactivex.io/documentation/operators.html#alphabetical创建操作用于创建Observable(被观察者)的操作符Create(创建) — 通过调用观察者(observer)的方法从头开始创建一个ObservableDefer(推迟) — 在观察者订阅之前不创建这个Observable,为每一个观察者创建一个新的O

2017-03-03 09:37:53 1463

原创 AndroidStudio Jni 开发初识

NDK 是什么?NDK是一系列工具的集合,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk为什么使用NDK代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。开始使用下载ndk环

2017-01-13 16:55:48 292

原创 在自定义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 760

原创 Android 发布Library到Jcenter

前言习惯了 compile ‘com.android.support:appcompat-v7:24.2.1’ 这种依赖第三方库的方式,简直不要太爽。那为什么这么一句话就可以引入一个第三方库呢?这全是Jcenter的功劳,Jcenter不知道是什么?那真的可以自己Google一下了。 现在我们自己尝试一下把自己的Library上传到Jcenter,这里我用自己以前开源的项目Updater当例子来试

2016-12-30 15:23:04 469

原创 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 439

原创 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 7973 7

原创 ViewPageerTransform深入理解,给viewpager切换加动画

ViewPagerTransforms的深入理解每当viewpager上一个可见或依附的页面发生了滚动事件就会调用PageTransformer,这让应用可以使用自定义transformation让viewpager某一个页面视图上实现某些特定的动画属性。但是这样的属性动画只能支持到android3.0版本或以上,在早期的版本上设置viewpager的PageTransformer会被忽略。公有方法

2016-08-20 23:02:27 9774 4

原创 使用Android Support Annotations优化你的代码

Android Support Annotations提供的注解允许你想lint检查那样提供一些提示在代码审查上,可以帮助你解决一些难以发现的代码问题。添加依赖选择File > Project Structure点击Dependencies标签点击“+”按钮然后选择Library dependency那项在弹出的选择框选择support-annotations然后点击o

2016-08-16 11:54:19 2950

原创 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 289

原创 AndroidStudio对比Eclipse快捷键

debug/run 操作 studio eclipse 计算变量值 alt+F8 ctrl+shift+I 跳到下一步 F8 F6 跳到下一个断点 shift+F8 F8 进入到代码 F7 F5 停止运行 Ctrl+F2 debug运行app shift+F9 F11 运行app shift+F10 ct

2016-08-12 15:13:21 526

仿支部包支付完成dialog

仿照支付宝支付成功的一个简单实例dialog

2016-01-06

HiJson解析器

绝对好用的json解析器,编辑器。使用HiJson工具并通过此工具快速查看JSON字符串、熟悉JSON的数据结构。针对程序员来说,如果了解了连续字符串对应的JSON的数据组成,便可以快速对JSON字符串进行数据处理。

2015-08-28

sublimeText

Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器。Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。 Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。 2012年6月26日推出新版本的Sublime Text 2.0,与之前版本相比主要有较大的改善:支持 Retina 视网膜屏、快速跳到下一个、文本拖放、改善构建系统、CSS 自动完成和高亮设置等。

2015-08-28

markdownpad

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式。

2015-08-28

空空如也

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

TA关注的人

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