技术分享
文章平均质量分 70
jklwan
这个作者很懒,什么都没留下…
展开
-
androidx中ViewPager导致的死循环绘制问题
目录简介查找原因onStop和onDestroy回调延时的原因在处理什么消息?WindowInsets总结简介最近项目升级到了androidx,突然出现了一些问题,Activity的onStop和onDestroy变得很慢,基本都在十秒了,导致一些页面表现不正常,于是来着手来解决这个问题。查找原因onStop和onDestroy回调延时的原因先看下onStop和onDestroy回调延时的原因,找到一篇文章写得很好:深入分析Android中Activity的onStop和onDestroy()回调原创 2022-01-29 18:00:00 · 1206 阅读 · 0 评论 -
解决AndResGuard在gradle 7.0上报错的问题
当Android Studio升级到Aretic Fox版本后,APG的版本也升级到了7.0,而gradle的版本也要随之升级到7.0了(参考官方文档)而AndResGuard在gradle升级到7.0后会出现错误,如下Some problems were found with the configuration of task ':app:resguardProdRelease' (type 'AndResGuardTask'). - In plugin 'AndResGuard' type 'c原创 2021-11-23 16:34:44 · 6598 阅读 · 4 评论 -
Android Studio tools attributes
1原创 2019-11-02 23:50:18 · 1639 阅读 · 0 评论 -
Android Fragments新功能
在刚刚过去Android Dev Summit 2019中,提到很多项目,如依旧大力推广的Kotlin,还有Jetpack Compose,CameraX,Room等新功能。其中也提到了android fragments,发布了androidx.fragment-1.2.0-rc01。fragment一直是开发中非常常用的工具,在以前的版本中由于生命周期的问题一直被诟病,虽然现在已经经过很多优...原创 2019-10-29 23:32:40 · 8278 阅读 · 0 评论 -
TextView的drawableTint兼容实现方法
在ImageView中有tint属性,用于设置图片的颜色,其实现原理是使用了ColorFilter的PorterDuffColorFilter,来重新生成drawable,关键代码是:读取tint,设置ColorFilter,生成新的Drawable,重新绘制// 读取tintint tint = a.getInt(com.android.internal.R.styleable.Imag...原创 2019-09-28 12:37:14 · 5549 阅读 · 1 评论 -
ripple的使用细则
当谷歌推出Material Design设计规范后,谷歌的产品都开始按照这一规范进行设计,包括了Android Mobile, Android Table, Web Chrome 在内的所有平台。按压产生水波纹(ripple)这一效果也登上舞台,在Android中的使用就是ripple xml资源文件和RippleDrawable。RippleDrawable就是ripple资源文件解析后生成...原创 2019-09-28 00:23:52 · 2016 阅读 · 0 评论 -
实现APNG图片解码及缩放显示
在实现GIF图片缩放的文章中,我们使用了GIF解码器来实现GIF图片的解码,然后修改了SSIV的代码来实现动图的缩放。而APNG也是一种动态图片,是在APNG格式上进行扩展而来的,关于apng的文档参考这个链接,关于PNG的详细资料参考这个链接。APNG的结构图普通的png的结构是Signature(校验)开头,然后是IHDR(包含图片信息),然后是各种辅助块,最后是IDAT数据块和I...原创 2019-09-22 23:08:01 · 2981 阅读 · 0 评论 -
调用系统照相机拍摄视频
调用系统相机拍照使用的比较频繁,相关代码如下Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Uri fileUri;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { fileUri = FileProvider.getUriForFile(act...原创 2019-09-19 00:44:11 · 697 阅读 · 0 评论 -
okhttp上传文件出现OOM
okhttp是一个比较优秀的库,使用非常广泛,相信大家都比较熟悉。在最近的使用中却发现了一个OOM的情况,在上传比较大的图片或视频时会发生,日志如下Caused by: java.lang.OutOfMemoryerror: Failed to alocate a 267201798 byte alcation with 8388608 free bytes and 233MB until ...原创 2019-09-18 23:56:25 · 3881 阅读 · 0 评论 -
多渠道打包时修改apk的输出目录
在使用productFlavors进行多渠道打包时,在打release包时可能需要对所有的release包进行拷贝到一个目录中,这里有两种方法,一种是直接修改输出的目录,一种是拷贝到另外的目录中。1.修改输出目录:在以前版本的gradle中可以使用outputFile的方式,而新版本只能使用outputFileName的方式。判断是否release,然后修改输出的目录。 appli...原创 2019-09-15 23:28:26 · 1719 阅读 · 0 评论 -
实现GIF图片的缩放
在图片选择器中提到gif文件是使用了普通的ImageView来实现的,如果需要实现gif图片的缩放那么就需要自定义SSIV。首先需要GIF解码器,可以选择使用glide的gif decoder,也可以使用原版的https://gist.github.com/devunwired/4479231。改造SSIV主要修改的地方是setImage方法,最后是使用了BitmapLoadTask加载图...原创 2019-09-15 22:29:54 · 1340 阅读 · 0 评论 -
设计一个图片选择器(下篇)
在前两篇中已经完成了数据的展示,就剩下图片显示功能。可以自己写图片加载库,或者使用当前使用比较广泛的图片加载库例如Picasso,Glide或Fresco。自己写的话还是比较麻烦,需要处理内存管理,性能,图片处理等方面,而且如gif等动图就无法加载。选择库的话Picasso有些弱了,Fresco又比较大 ,暂时就用Glide为例来处理。缩略图的加载图片选择页面,文件夹列表以及媒体文件的列表...原创 2019-09-12 23:41:00 · 209 阅读 · 0 评论 -
设计一个图片选择器(中篇)
在上篇中提到使用CursorLoader来加载媒体数据,以微信的图片选择器为例,需要一个文件夹列表和文件夹内详情两个CursorLoader。文件夹列表的CursorLoader确定使用的URI:当只需要一种类型时可以使用独立的URI,例如只需要图片则使用:IMAGE_URI(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);只需要视频则使用VID...原创 2019-09-11 23:47:16 · 267 阅读 · 0 评论 -
Android 9上圆角无效的问题
在Android 9的系统上如果使用PorterDuffXfermode的方法实现画圆角的话会失效,官方issue地址https://issuetracker.google.com/issues/111819103,在这个帖子中谷歌回复到,有三种方法使用android.view.ViewOutlineProvider(可以在这个示例地址https://github.com/googlesamp...原创 2019-09-02 22:47:42 · 1572 阅读 · 0 评论 -
设计一个图片选择器(上篇)
在项目的开发过程中,选择图片是非常常用的功能,例如选择头像功能,因为是单图选择一般都是使用系统图片选择器;而例如反馈,评论,发布信息等需要选择多张图片的场景使用系统选择器就不再适合了。准备工作访问图片需要添加存储卡权限,在6.0之上还需要实现运行时权限的申请(参考官方文档:https://developer.android.com/training/permissions/requesti...原创 2019-09-02 18:29:11 · 244 阅读 · 0 评论