- 博客(20)
- 资源 (6)
- 收藏
- 关注
原创 Android RecyclerView 四级缓存机制
Android RecyclerView 四级缓存机制1、Scrap (mChangedScrap、mAttachedScrap)涉及保存屏幕内的holder,涉及到item动画时、被notifyItemRangeChanged移除的holder保存在mChangedScrap中,被其他notify(除notifyDataSetChanged)移除的holder保存在mAttachedScrap中。mAttachedScrap在屏幕中的缓存,用于数据刷新时,不需要重新加载子ItemView,直接复用。因
2022-01-26 14:34:59
2607
原创 Android 自定义圆角TextView控件 带边框 非shape
Android 自定义圆角TextView控件在开发中遇到圆角背景大多都是shape资源文件 这样是最简单的方式之一,但是如果很多的圆角,资源文件要不断地创建不同的drawable,最终对打包Apk也不太友好,自定义一个控件来实现View多用先来看下效果自定义一个RectgleTextViewpublic class RectgleTextView extends AppCompatTextView { private static final String EMPTY_SPACE =
2021-12-28 15:35:49
2435
原创 Android pdf转换bitmap保存到本地
Android pdf转换bitmap保存到本地PDF转换成图片保存到本地 Android有自带的API提供 首先要把PDF文件下载到本地,下载成功使用下载就最简单的IO下载都行例如: try { URL url = new URL(downUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(
2021-12-21 11:03:38
2171
原创 Android 一个简单的权限封装
一个简单的权限封装Android 6.0以后有很多权限需要动态申请,如果涉及很多权限相比较麻烦很多,封装一个权限Manager是必不可少的一部分。简单封装一个PermissionManager吧public class PermissionManager { public String[] permission = new String[]{}; public String[] permissionTip = new String[]{}; @SuppressLint("
2021-12-14 11:35:28
413
原创 Android拓扑排序 依赖任务加载框架
拓扑排序 依赖任务加载框架在实际项目开发中,不可避免地会遇到某个任务执行完成之后再去执行另一个任务遇到这种情况很多人通常都是将任务B写进任务A的末尾监听任务A加载成功的回调函数执行任务B通过volatile关键字卡住加载流程例如在初始化项目时候会遇到很多三方的sdk 初始化init()平时我们常常会使用各种第三方框架,如mmkv、glide、leakcanary等优秀的第三方库,大多数第三方库需要初始化后才能使用,因此会出现下面的代码:private void init() {
2021-11-24 12:08:24
2367
原创 Android MediaPlayer播放 听筒外放切换
Android MediaPlayer播放 听筒外放切换,通过注册监听,来判断是否靠近听筒。结合mediaplayer坐音频播放,Android hardware搞一个根据光感听筒外放切换。MediaManager是播放器构建模式,维护了一个MediaPlayer,用来重新处理播放器。AudioManagerAndroid为我们提供的(音量大小控制)的API: AudioManager(音频管理器)了,该类位于Android.Media包下,提供了音量控制与铃声模式相关操作。获得AudioMana
2021-11-08 18:01:32
3433
原创 Android 各种 Utils工具类封装 Utils大全集合
Android各种工具类封装Utils大全集合AppUtils 获取项目的Application context 方便每个Utils去init(); 一定要在Application中初始化BitmapUtil ==》图片工具类GlideRoundTransform ==》glide加载任意想加载的圆角CrashHandler ==》异常捕获ThreadManager ==》线程池管理线程ButtonClickUtils ==》防止快速点击DataUtils ==》填充数据工具类GsonUtilKeyBo
2021-11-04 20:44:15
2753
原创 Android 点击图片放大至全屏 再次点击关闭过度动画 Shared Element效果(共享元素效果)
Android 点击图片放大至全屏 再次点击关闭过度动画最近项目需要给用户一个体验优化,各种查阅,然后改了很多地方,类似于图片的点击预览,消息列表的点击流畅过渡。Shared Element效果(共享元素效果)核心代码只有简单的几行,属于知识扫盲,一直没留意这种动画效果,然后可以根据这种效果自己实现,封装View.首先在项目布局xml中实现transitionName android:transitionName="{放入自定义的TagName}"事件处理的layout.xml
2021-11-04 18:03:21
2674
原创 MVVM项目中DataBinding+RecyclerView使用 封装全能Adapter
DataBinding+RecyclerView使用MVVM(Model-View-ViewModel)项目中databinding是非常的简洁,最近遇到了一个RecyclerView的使用,有一个封装完成的Adapter是非常便捷的。Model 指的是数据层,里面包含一些bean数据。(我这里直接用bean数据类代表Model)View 指的是显示层,就是通过DataBinding绑定视图后得到的一个bindingViewViewModel 这是一个抽象的概念,这个类其实就是数据显示与其控制逻辑的
2021-10-25 20:22:53
1710
原创 Android RSA+BASE64加密封装
生成密钥一般密钥都是公司提供,如果自己写,提供两种生成密钥方法如下/** * 随机生成RSA密钥对(默认密钥长度为1024) * * @return */ public static KeyPair generateRSAKeyPair() { return generateRSAKeyPair(1024); } /** * 随机生成RSA密钥对 * * @param keyLength * 密钥长度,范围:512~2048<
2021-06-02 09:53:52
636
2
原创 Andoid 富文本Richtext使用
使用方法RichText .from(text) // 数据源 .type(RichText.TYPE_MARKDOWN) // 数据格式,不设置默认是Html,使用fromMarkdown的默认是Markdown格式 .autoFix(true) // 是否自动修复,默认true .autoPlay(true) // gif图片是否自动播放 .showBorder(true) // 是否显示图片边框 .borderCol
2021-05-25 10:40:10
542
1
原创 android https下载遇到SSLHandshakeException自签证书认证解决
SSLHandshakeException解决搞了一周 各种头疼 最后终于搞定直接代码走起在做请求之前添加一个方法createIgnoreVerifySSL("TLSv1.1"); /** * 绕过验证 * @return */ fun createIgnoreVerifySSL(sslVersion: String): SSLSocketFactory { var sc = SSLContext.getInstance(sslVersio
2021-03-22 21:20:53
535
原创 android 获取年月日
年月日获取很简单 直接上码public class DataString { private static String mYear; private static String mMonth; private static String mDay; private static String mWay; public static String StringData(){ final Calendar c = Calendar.getI
2021-03-04 09:51:42
2167
1
原创 android mp3实时录制转换
Android mp3音频文件录制Android mp3音频文件录制我搞了2天的东西 公司遇到上传语音转文字 需要mp3文件 android ios 都无法录制MP3文件,好多文章都是ndk打包so库,借鉴了好多终于搞定了,给大家分享出来,代码小白勿喷录音权限必备各种权限自己加,这里就不一一列举了,文字末尾添加资源文件library依赖库导入implementation project(':mp3library')LameUtilpackage com.lebanban.mp3libra
2021-03-03 17:22:42
600
1
原创 Android Dagger2原理
Dagger2原理Dagger2是什么Dagger2是一个Android和Java中的快速注射器。什么是依赖注入依赖注入是一种面向对象的编程模式,它的出现是为了降低耦合性,所谓耦合就是类之间依赖关系,所谓降低耦合就是降低类和类之间依赖关系。可能有的人说自己之前并没有使用过依赖注入,其实真的没有使用过吗?当我们在一个类的构造函数中通过参数引入另一个类的对象,或者通过set方法设置一个类的对象其实就是使用的依赖注入。通常依赖注入有以下几种方式通过接口注入interface ClassBInterf
2020-10-27 10:48:30
597
原创 android 事件分发机制解决滑动冲突
android 事件分发机制解决滑动冲突在写viewpager跟recycler 时候遇到了滑动冲突问题 使用时间分发可以有效解决public class MyRelativeLayout extends RelativeLayout { public MyRelativeLayout(Context context) { super(context); } public MyRelativeLayout(Context context, AttributeSe
2020-10-16 13:47:35
128
原创 简单的SharedPreferences单例封装
简单的SharedPreferences单例封装public class SpUtils { private static SpUtils instance=new SpUtils(); private static SharedPreferences mSp; private SpUtils(){} //保证单例对象唯一 public static SpUtils getInstance(){ if (mSp==null){
2020-10-16 13:44:59
398
原创 android retrofit+okhttp 请求框架简单封装
retrofit+okhttp 请求框架简单封装首先需要第三方依赖导入 //rx全家桶->网络请求 api 'com.tbruyelle.rxpermissions2:rxpermissions:+' //okhttp依赖 api 'com.squareup.okhttp3:okhttp:3.11.0' //okhttp日志拦截器 api 'com.squareup.okhttp3:logging-interceptor:3.11.0' //gson
2020-10-16 13:41:56
521
原创 Android 从服务器下载最新APP并更新当前
Android 从服务器下载最新APP并更新当前首先获取当前最新的APP版本号public long getCurrentVersionCode(){ long CurrentVersionCode = 0; try { PackageInfo packageInfo = context.getApplicationContext().getPackageManager().getPackageInfo(context.getPackageName(), 0);
2020-10-16 13:36:48
666
原创 各种dialog的基本设置
一、确定取消选择对话框 // 单选对话框 public void simple_dialog(View view) { //构建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); //设置属性 builder.setIcon(R.mipmap.ic_...
2019-12-26 21:10:21
561
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人