iPad Pro 妙控键盘体验 总算还是入手了 iPad Pro 的妙控键盘了,尽管还是通过二手的形式入的,但总体体验来说,还是可以的,除了一个小插曲:卖家之前贴了膜,我在问清楚之前直接撕了,导致留下了非常难看同时手感很差的痕迹。不知道怎么地想起来小时候拿橡皮擦擦内存条的经验,于是下楼买了两个(我还真怕一个不够),然后使用了以下方式来解决:首先直接用橡皮擦用力擦把橡皮擦用手清理干净后,拿毛巾湿水擦拿干毛巾擦干上面步骤反复几次然后自然风干等干了后,如果还有一些小的痕迹,那么可以直接用干的手指涂…在简单使用了后,已经能输出一些自己的一些心得了。硬件方面首先,从硬件方面看,键盘的质感还是不错的,当然 Apple 的败笔之作——蝶式键盘可真是害人不浅,目前公司给我用的旧电脑也还是蝶式键盘,可谓是一大祸害。当然这个键盘本身其实用得不是特别习惯,别说 MacBook
谈谈 Android 渲染机制:如何绘制并显示一帧图像? 本文将介绍 Android 的渲染机制。了解 Android 的渲染机制不论是对日常的开发,还是渲染问题排查都会有帮助。本文希望能带你了解 Android 是如何绘制并显示一帧图像的,同时会涉及 Perfetto UI 的使用,以及带来一些延伸的思考问题,感兴趣的可以在阅读的同时同步使用 Perfetto UI 进行尝试。经典问题 :如何在正确的时机获取 View 的尺寸?先看一个经典的例子,如何获取一个 View 的尺寸?很简单是吗?val w = view.width val
Apple Silicon 移动端开发填坑记录(持续更新) 尽管网络上已经有很多关于使用了 Apple Silicon: M1 设备(包括 MacBook Air,MacBook Pro 和 Mac mini)的开箱 & 介绍和性能评测,但评测毕竟是评测,如果你作为一个目标用户,那么可能还是想看点对你购入和日常开发有帮助的而且容易检索的内容。于是便有了本文。先说一下 Mac mini 使用体验:非常安静。使用几天下来,编译我司 Android 项目完全没声音,个人项目更加不用说了。使用以往的 MacBook Pro,
【DevTips】使用最相符的 Rx 流 如果你在盲目地使用 Observable,那么需要注意下,Rx 里的流也是很多类型的:FlowableObservableSingleMaybeCompletable如果你需要对外提供 API,准确地,对外提供一些方法,那么准确地使用跟业务场景最相符的 Rx 流,能有效地减少调用方的学习成本,降低出错几率。具体地:使用 Flowable,如果你需要支持 back pressure,也就是说,你上游的数据可能会发射非常频繁,而下游可能会处理不过来;使用 Observable,如果你的上游可能不太频繁地发射多次数据,下游都能处理过来;使用 Single,以表示上游的操作只有两种结果:成功和异常;一个例子是,发起网络请求,
【DevTips】LogKt LogKtDebug 下输出 Log,Release 下不输出,这个很多人对这种操作都非常熟悉了。对于 Kotlin 代码,可以使用这样的类打 Log,提高运行效率:object LogKt { val DEBUG = BuildConfig.*DEBUG* inline fun debug(tag: String**,**block: () -> String) { if (DEBUG) { Log.d(tag**,**block(
【DevTips】谈谈 Kotlin 里构建对象 Builder 模式大家想必也都知道。但是应该在什么时候使用呢?如果满足以下条件,那么应该使用:需要构建的对象是 Immutable 的,也就是说,这个对象的实例属性应该是不能被更改的。需要构建的对象的可设置属性非常多,以致在 constructor 里塞下所有参数对调用方来说会非常麻烦。那么 Java 里常见的 Builder 模式再简单不过了(以下例子做了缩短,同时用了 Kotlin 来表达):class AppRequest { private var uid: String? = null private var appId:
android 【DevTips】Kotlin Coroutines Recipes 说起来,也有用 Kotlin Coroutines 一段时间了,多多少少会有些经验和想法。刚好前些天参加了一个 Kotlin Everywhere 的开发者会议,所以也打算就 Kotlin Coroutines 聊聊一些经验。文章标题名为 Kotlin Coroutines Recipes,Recipes 是菜谱的意思,这里不会去翻译官网上的文档,翻译这种事情很多人做过了,这里我主要结合一些例子去提供一些实践的经验。当然了,这里写的不一定就是对的,所以请保留态度地阅读,非常欢迎讨论。同时,没有特别说明,下面的例子会使用 Kotlin 标准库里的方法和类,不使用
journey 库布齐沙漠指北 端午期间去了个地方——库布齐沙漠。在很早之前就想去走一趟沙漠,刚好之前有朋友去过,于是咨询了下后,赶紧报了个团就出发了。接下来我会以「浅体验的角度」分享一下徒步沙漠的一些注意事项以及关于摄影相关的内容。一些背景如果忽略「天漠」的话,那么「库布齐」可以说是距离北京最近的一个沙漠了吧。「库布齐沙漠」位于内蒙古鄂尔多斯市郊,距离包头和鄂尔多斯都比较近,从北京出发的话约需要 8 小时到达。此沙漠长 400 公里,宽 50 公里,说小不小,说大不大。能看到一望无际的沙漠景观吗?如果你站在最高的山丘处,那么还是能看到远处的山,甚至是郊区的小房子。
android Jetpack Compose: Hello World 什么是 Jetpack Compose这里 Jetpack Compose 的[项目地址](Jetpack Compose)。一句话介绍:A declarative toolkit for building UI inspired by React, Litho, Vue.js and Flutter.因此 Jetpack Compose 是:一个工具集用于构建 UI是声明式的「构建 UI 的工具集」
More of RxJava 这是一系列文章的第一篇,这个系列没有什么非常明确的主题,可以看做是日常开发和协作里悟出来的一些技术相关的事情——或者说是技术方面的随笔。这一篇是关于 RxJava。曾经看到这么一篇文章,称赞 Kotlin Coroutine 大好,RxJava 可以直接丢弃了;也曾经看到一篇文章(事实上正是我刚开始学习 RxJava 的时候看的),称 RxJava 的本质就是异步。如果把这两篇文章放在一起看,那么似乎 “合理”:Kotlin Coroutine 解决了 JVM 世界里过去的 Callback 形式的异步回调,而 RxJava 的本质就是处理异步,
vlog VLOG 000:北京,北京 很久之前就想做一个视频,或者说是现在大家喜欢说的 VLOG。但是做关于什么的视频呢?说实话心里不是非常有底——如果你有留意我社交账号的描述,可以看到这么一句简单的描述——拿相机的程序员。尽管我认为我「程序员」的属性可能还是占多数,但是在日常里我还是挺乐意拾起相机去拍摄生活的一些日常和非日常的事情——注意,这里用的是词是「拍摄」。关于摄像我一直很少有刻意去做。究其原因,如果追求质量的话,录制视频显然比拍摄静态照片难度高不少,技术上做到稳定不抖,题材上要做到有意思,再加上最后的剪辑,其实足以让人产生放弃的想法(没错,我已经挣扎很久了)。尽管如此,我还是决定在视频方面做一些尝试,因此这是一段一分多钟的我定义还算是 VLOG 的 VLOG。既然是第一段,我自我要求没有多高,
关于 Android Q 的 Scoped Storage 如果你还不了解 Android Q 的 Scoped Storage,那么请先自行详细阅读官方文档。Scoped Storage 的好处自不用说,以下会从两个角度来考虑这个新变化所带来的影响:媒体生产者媒体消费者NOTE:Storage Access Framework(SAF)不在本文讨论范围内,主要是考虑到知乎可能不会用上。媒体生产者举个简单的例子,得到一个 Bitmap,需要把它写入文件并能被检索:val file = File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "${System.currentTimeMillis()}.jpg"
flutter SwitchDecor:给你的 Switch 截图添加色彩 事情缘由是这样的:入手 Nintendo Switch 也有一个多月了,买的游戏也有一些了,其中就包括著名的《分手厨房2》——说错了,是《煮糊了2》。不久之前跟一个朋友玩,玩完某一局我大获全胜,于是截了个图决定分享。当我在分享的地方插入了这个截图后,发现这图有点单调啊,完全体现不了这是一个 Switch 上的游戏——毕竟这是一个跨平台的游戏——于是想法就来了,之前我单独给自用的 OnePlus 6 写了一个带壳截图的 App,那么给 Switch 截图添加一些元素可能也是一个不错的思路。 于是当天就开始动手了,先说成果:这是一个叫 SwitchDecor
Kotlin Idioms It has been a while since I start using Kotlin as my first class language when developing Android app. It's efficiency and easy to use, though it might have something we all should
Useful apps for Mac ImageMagick A command line tool for processing image file e.g. $ convert image.svg image.png HyperDock Enable window preview in dock like what Windows do. IINA A video player for Mac.Find
Encapsulate a AcrylicBrush for UWP in Creators Update Finally we can achieve this effect by using HostBackdrop brush. In the upcoming Fall Creators Update, we can use a special Brush named AcrylicBrush that takes care of all the work and used
The interoperation between Visual layer and XAML layer in Creators Update If you are using Composition APIs in November Update, it's time to know that many things are changed in Creators Update. Note that the changes start in Anniversary Update but since the Creators
使用 Mockito + Junit 进行单元测试的手记 使用 spy() 监视真实的对象 在使用 when(foo.call()).thenReturn("foo"); 的时候,事实上并没有真的调用 foo.Call(),而是在运行测试的时候,在调用 foo.call() 的时候都给你返回 foo 这个返回值:当然这个前提是 foo 是一个 Mock 对象(意味着加了 @Mock 注解)。 如果要调用一个真实的对象的方法,同时又要控制它的返回值,那么可以这样做:
解决 ViewPager + Fragment 的恢复问题 你可能是这么使用 ViewPager + Fragment 这个组合的: public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; private List<Fragment> mFragments; private CustomViewPagerAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.
android Nice meeting #Kotlin 最近开始学习使用 Kotlin 语言进行日常开发,目前首先对我的一个壁纸应用 MyerSplash 的 Android 版本开始下手——想起来年初重写 MyerList 真是白费了啊,重写完还没发布,估计我又得用 Kotlin 再写一次了。 正如官方所说的,Kotlin 跟 Java 有 100% 的互操作性,这意味着项目里可以同时存在 Kotlin 和 Java 代码,两者可以互相调用。而从 Java 转到 Kotlin,其实也并不需要完全重写代码—
Reset nested scroll effect manually 使用 CoordinatorLayout + AppBarLayout 可以轻松实现这样的嵌套滑动效果: 当列表往上滚动的时候,Toolbar 可以随之往上滚直到消失,然后往下滚回来的时候,其也会跟着滚下来。 实现方式很简单,这里只是做一个简单的演示: <android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <FrameLayout app:layout_scrollFlags="scroll|enterAlways&
FlipperView-翻牌一样翻 View 具体效果如上图 GIF,先直接扔用法: <com.juniperphoton.flipperviewlib.FlipperView android:id="@+id/flipper_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="
UWP 开发:Hybird 式开发的一些要点 禁用滚动、隐藏滚动条等 为原 HTML 加入如下 CSS 即可实现: html{ -ms-overflow-style:none; overflow:hidden; -ms-content-zooming:none; } 其中: -ms-overflow-style 表示滚动条的行为,取值可以参考这里 overflow:表示超出区域是否显示,可以参考这里 -ms-content-zooming:表示是否启用 pinch and zoom 注意的是,对于其他 Webkit 内核(比如 Chrome)的浏览器,
Use ssh in Git. STEP1 First of all, check if you have had public key by: cd ~/.ssh ls If you have foo and foo.pub, it means that you aleardy have a private key and a
Embed Titlebar into your UWP app TitleBar is an important part of an UWP app. Basically you can customize its background and foreground color making it consistent with your app's theme color. However, some apps may forget to change