setStrokeCap(Paint.Cap cap) 设置线头的形状放出「平头」「圆头」「方头」这种翻译我始终有点纠结:既觉得自己翻译得简洁清晰尽显机智,同时又担心用词会不会有点太过通俗,让人觉得我不够高贵冷艳?当线条的宽度是 1 像素时,这三种线头的表现是完全一致的,全是 1 个像素的点;而当线条变粗的时候,它们就会表现出不同的样子:虚线是额外加的,虚线左边是线的实际长度,虚线右边是线头。有了
2022-11-23 michael007js 621
本文讨论的不是类似秒拍的短视频录制,而是用户选择本地一个现有视频,压缩后上传。秒拍的实现其实是自定义视频录制功能,从而控制录制时长,分辨率,码率等,生成体积很小的视频再上传。而我们则没办法控制原视频的参数,可能是一个很大的视频需要压缩处理。思路利用ffmpeg对视频转码,通过设定参数生成分辨率和码率更小的视频,实现压缩。当然,ffmpeg的功能远不止如此,这是一个很大的专题。用到的开源库:http
2022-11-23 michael007js 119
前言本文讨论的不是类似秒拍的短视频录制,而是用户选择本地一个现有视频,压缩后上传。秒拍的实现其实是自定义视频录制功能,从而控制录制时长,分辨率,码率等,生成体积很小的视频再上传。而我们则没办法控制原视频的参数,可能是一个很大的视频需要压缩处理。思路利用ffmpeg对视频转码,通过设定参数生成分辨率和码率更小的视频,实现压缩。当然,ffmpeg的功能远不止如此,这是一个很大的专题。用到的开源库:ht
2022-11-23 michael007js 611
为什么要引进 Lifecycle我们在处理Activity或者Fragment组件的生命周期相关时,不可避免会遇到这样的问题:我们在Activity的onCreate()中初始化某些成员,比如MVP架构中的Presenter,或者AudioManager、MediaPlayer等,然后在onStop中对这些成员进行对应处理,并在onDestroy中释放这些资源。这是很常见的情形,按照通常的做法,我
2022-11-23 michael007js 489
volatile关键字在Java多线程编程编程中起的作用是很大的,合理使用可以减少很多的线程安全问题。但其实可以发现使用这个关键字的开发者其实很少,包括我自己。遇到同步问题,首先想到的一定是加锁,也就是synchronize关键字,暴力锁解决一切多线程疑难杂症。但,锁的代价是很高的。线程阻塞、系统线程调度这些问题,都会造成很严重的性能影响。如果在一些合适的场景,使用volatile,既保证了线程安
2022-11-23 michael007js 123
Android 获得View截屏最优方案/** * 获得View的截屏 Bitmap * * @param view * @return */public static Bitmap getMagicDrawingCache(Context context,View view,boolean quick_cache) { Bitmap bitmap = (Bitmap) view.getTa
2022-11-22 michael007js 25411
https://github.com/michael007js/xxx.gitgit@github.com:michael007js/xxx.git这两个地址展示的是同一个项目,但是这两个地址之间有什么联系呢?前者是https url 直接有效网址打开,但是用户每次通过git提交的时候都要输入用户名和密码,有没有简单的一点的办法,一次配置,永久使用呢?当然,所以有了第二种地址,也就是SSH URL
2022-11-21 michael007js 429