- 博客(67)
- 收藏
- 关注
原创 DataBinding下的RecycleView适配器Adapter基类
基于MVVM databinding架构下,recycleView适配器基类
2022-07-30 12:40:11
312
原创 非递归式查找树形数据
给你一棵树,怎么用非递归方式去查找里面满足要求的某些节点?可以用队列来实现,举例如下:Android界面就是基于一棵树的结构来进行显示的,怎样通过一个ViewGroup,非递归式的找到它下面所有Button控件?借助一个队列,依次存储该根节点及其下面所有ViewGroup子节点,然后通过while循环出队列,出队列时,获取该节点的所有子节点,如果是ViewGroup,将该节点入队列,如果不是,则判断是否是Button,是就找到了一个,不是就判断下一个节点,代码如下: fun findAl
2022-04-17 15:30:58
2156
原创 orhanobut logger 自定义文件保存FormatStrategy
public class XTLogFormatStrategy implements FormatStrategy { private static final String NEW_LINE = System.getProperty("line.separator"); private static final String NEW_LINE_REPLACEMENT = "\n"; private static final String SEPARATOR = "↓"; .
2022-04-17 14:47:57
751
1
原创 解决ViewPager适配器PagerAdapter数据更新后页面残留问题
之前遇到过通过数据构造了几个显示View,作为PagerAdapter的数据集,当外面更新这个数据集时,前一次的UI仍然还显示的问题,经过一番折腾,终于完美解决这个问题。方法如下:1、不要使用View作为数据集尽量用原始数据来作为数据集,然后在instantiateItem方法里通过数据实时生成需要的View页面 @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, i
2022-03-17 16:57:53
809
原创 Android生成视频预览图(含本地视频和网络视频)
object VideoThumbUtil { fun loadLocalVideoThumb(videoFilePath: String?, cover: ImageView) {// ThumbnailUtils.createVideoThumbnail(videoFilePath, MediaStore.Images.Thumbnails.MINI_KIND)?.let { thumb ->// Glide.with(cover.context.
2021-07-15 09:53:04
1255
原创 Android应用通知功能封装
object NotificationUtil { //程序通知设置是否开启 fun notificationEnabled(context: Context): Boolean { return NotificationManagerCompat.from(context).areNotificationsEnabled() } //程序指定通知渠道设置是否开启 fun channelEnabled(context: Context, chan.
2021-06-26 09:26:20
225
2
原创 GPS经纬度数值格式化
//以南为负,以北为正fun getLatitudeFormat(latitude: Double): String { val forward = if (latitude < 0.0) "S" else "N" val latValue = abs(latitude) val du = floor(latValue).toInt() val temp = getPoint(latValue) * 60 val fen = floor(temp).toInt() return .
2021-06-19 09:32:47
332
原创 Android通过Intent传递多Uri
目前项目中要做一个自定义拍照生成照片和选取系统照片来进行图片文件批处理的业务,为了兼容高版本Android,所以一直操作的照片文件为Uri格式,再通过Uri来进行真实图片读取。
2021-06-19 09:28:47
710
原创 Android 通过Uri获取真实文件路径
object UriUtil { private fun getRealPathApi19Above(context: Context, uri: Uri): String? { var filePath = "" try { // DocumentProvider if (DocumentsContract.isDocumentUri(context, uri)) { // External.
2021-06-19 09:16:38
2797
原创 Android工具类之网络工具类
该工具类兼容wlan0, eth0和手机卡,并且采用ConnectivityManager.NetworkCallback方式
2021-05-28 19:05:02
703
1
原创 Android工具类之SharedPreferences(迁移到腾讯MMKV版)
1、引入依赖2、初始化3、实现public class SpUtils { private static final String PREFERENCE_NAME = "config"; private static SpUtils INSTANCE; private final MMKV mmkv; private SpUtils() { mmkv = MMKV.defaultMMKV(); //迁移 ..
2021-05-28 18:56:38
1578
1
原创 Android多Flavor设置不同启动Activity
有时候根据项目需要,不同渠道的应用主界面会有些不一样,怎么在Android项目里进行设置呢,方法如下:1、在Main下的AndroidManifest.xml中进行如下设置
2021-05-28 18:46:55
1277
1
原创 Android通用Dialog基类
一个通用Android的Dialog基类public abstract class BaseDialog extends AppCompatDialog { public BaseDialog(Context context) { this(context, R.style.XTDialogTheme); } public BaseDialog(Context context, int theme) { super(context, them
2021-05-03 21:28:45
305
原创 h264视频数据判断是否是关键帧
h264视频数据一帧的起始一般为00 00 00 01(视频首帧)和00 00 01(首帧之外每一帧),然后接下来的一位则表示帧类型,具体判断如下:/** * 检测是否是关键帧 * @param buffer 编码后的h264视频数据 */ public static boolean isKeyFrame(@NonNull byte[] buffer) { if (buffer.length < 5) { retur
2021-02-02 12:32:00
3178
1
原创 可重用数据载体类(Java版)
最近在做跟音视频相关的开发,这些数据通过网络接受过来后直接执行播放操作,为了更流畅的进行播放,进行了一个缓存队列进行暂存。从收流到放置缓存队列中,再到从缓存队列中取数据去进行播放,因为这些数据很多信息,需要创建一个实体类来进行封装,但是从创建-赋值-使用-丢弃,发现创建了大量的临时数据实体,大大增加了JVM的垃圾回收工作。就在考虑,能否仿照Android开发中Message类做一个可重复利用的实体类呢,这样就避免了重复创建大量的临时对象,而且也能大大减少创建对象带来的开销,于是看了下其源码,照葫芦画瓢如
2021-01-30 21:27:34
186
原创 Android工具类之SharedPreferences(升级版)
相较于之前写的工具类,在获取值的时候通过泛型自动推断,调用时也不用强转,很是方便。public class SPUtils { private static final String PREFERENCE_NAME = "config"; private static SPUtils INSTANCE; private final SharedPreferences mSharedPf; private SPUtils() { mSharedPf.
2021-01-26 22:09:39
354
原创 Android 音视频数据播放封装类
音频public class CAudioTrack { private final int mFrequency; private final int mChannel; private final int mAudioFormat; private AudioTrack mAudioTrack; public CAudioTrack(int frequency, int channel, int audioFormat) { this.m
2021-01-26 21:57:14
322
原创 G711A与PCM互转(Java版)
/** * PCM与G711转换器 */public class G711Converter { private static final short[] aLawDecompressTable = new short[]{-5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736, -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,.
2021-01-26 21:49:05
2011
8
原创 创建git仓库(简易局域网版)
跟伙伴协同开发一个项目,但是不需要存储在公司的服务器上,只在有限几个人之间管理即可。于是就拿其中一个人的电脑当仓库,并共享出去,其他人根据仓库在局域网内的共享地址进行gitpush和pull,一个简易版的git服务管理项目就完成了,具体方法如下:...
2020-12-19 22:11:12
1869
2
原创 Android组件化项目common_config.gradle
当涉及到多module组合开发时,每个module的build.gradle文件都拥有一些必要的属性,同一个Android工程中,在不同模块中要求这些属性一致,例如complieSdkVersion、buildToolVersion等。如果引用不一致,属性就不会合并到工程中,这样一方面会造成资源的重复,使得最终生成的APK包量增大,另一方面也会降低编译的效率。那么就必须有一个统一的、基础的Gradle配置,通过编写一个common_config.gradle(文件名可自定义),在各module的buil
2020-05-24 21:39:08
780
原创 Android工具类之ZXing(二维码/条形码)
介绍ZXing,一个支持在图像中解码和生成条形码(如二维码、PDF 417、EAN、UPC、Aztec、Data Matrix、Codabar)的库。ZXing(“zebra crossing”)是一个开源的、多格式的、用Java实现的一维/二维条码图像处理库,具有到其他语言的端口。地址GitHub地址:https://github.com/zxing/zxingAPI文档:https://zxing.github.io/zxing/apidocs/index.html目前最新版本为3.
2020-05-18 21:00:07
1016
原创 通过LayerDrawable实现进度条的功能
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> ...
2020-04-30 19:55:47
426
原创 Glide设置圆角图片(支持自定义圆角位置)
最近项目中有显示数据的需求,圆角父控件中最左端放置图片,此时显示起来图片的直角盖住了父控件的圆角,故需要对图片进行圆角处理后再显示。网上大多数都是通过实现Transformation,在transform方法中进行自定义处理,后来我发现Glide中的自带的设置圆形图片的RoundedCorners类,借鉴此类可以通过官方提供的TransformationUtils工具类来实现,具体实现如下:...
2020-04-30 12:50:16
3591
3
原创 常见的加解密算法处理(Java)
public class EncryptionUtil { private final static char[] chArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; private final static byte[] iv = {1, ...
2020-01-14 17:39:57
168
原创 UVC camera 封装类
下述代码是关于UVC camera处理的封装类,具体依赖的aar请参考https://github.com/saki4510t/UVCCamera。借用该类,在接入UVC 摄像头设备时可以很方便的进行使用,只需要在对应的Activity中,先初始化该类,绑定一个SurfaceView,便于展示摄像视频数据,再在onStart生命周期回调中调用onStart方法、onStop生命周期回调中调用o...
2020-01-10 16:50:35
845
1
原创 一款简易的自定义数字键盘输入控件
实际效果如下:首先布局layout文件,采用三总四横等比的方式进行布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pare...
2020-01-08 16:58:43
343
原创 adroid SQLiteOpenHelper数据表结构升级
最近在项目中遇到了一个新需求,需要增加用户在本地缓存中一个字段,由于用户缓存是根据所在群来进行分表保存的,在更新数据库升级时,发现要修改的表明是动态生成的,经过不断努力和网上的参考,终于找到了解决方法。主要的逻辑还是放在自定义SQLiteOpenHelper类中的onUpgrade方法里,我们根据db参数可以获取所以的数据表,由于分表时表名都具有一定的规律,所以可以根据该规则来进行统一修改。下...
2019-11-15 20:59:07
259
原创 Java利用反射动态修改类引用类型的成员变量的属性
今天在项目中遇到了一个情况,用第三方控件时,发现其在显示的时候有一个Label字符显示,不符合产品UI需求,之后通过查看该源码,发现并没有公开方法来控制该Label的显示效果,但是自己去实现太过繁琐。之后想到可以通过Java的反射功能来进行修改,可能会达到要求。一般对于Java反射修改对象成员的示例大多体现在修改一个类的基本类型的成员变量,或者其成员函数来进行调用。但是如果一个类的成员变量是个...
2019-11-07 21:18:25
1980
原创 TextView设置指定字符显示颜色
在项目中做了一个简单的搜索功能(本地缓存搜索),产品需要对搜索结果中针对搜索词进行高亮显示,类似于百度搜索后每个条目中满足的分词结果进行高亮显示,这里由于只是一个简单功能,所以并不存在分词功能,就用全词进行精确搜索,对满足要求的结果进行颜色设置即可,方式如下: String itemStr = searchItem.getDes(); String keywor...
2019-11-07 21:06:15
265
原创 Android BLE蓝牙管理类
/** * 蓝牙扫描管理类 */public class BleScannerManager { public static final String TAG = "BleScannerManager"; /** * 默认扫描间隔 */ public static final long DEFAULT_SCAN_TIME = 12000; ...
2019-07-29 20:57:32
244
原创 Android工具类之Keyboard
public class KeyboardUtils { private KeyboardUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } /** * 隐藏软键盘 * * @param activity The...
2019-06-22 16:51:15
525
原创 Android工具类之TextSpan
public class TextSpanUtils { // 由一多个 private static final String START = "start"; private static final String END = "end"; private static final String REGEX = "regex"; public st...
2019-06-22 16:47:20
822
原创 Android工具类之线程池
public class ThreadUtils { //线程池核心线程数 private static int CORE_POOL_SIZE = 5; //线程池最大线程数 private static int MAX_POOL_SIZE = 100; //额外线程空状态生存时间 private static int KEEP_ALIVE_TIM...
2019-06-22 16:44:21
659
原创 Android工具类之SharedPreferences
public class SPUtils { public static String PREFERENCE_NAME = "config"; public static void clear(Context context) { SharedPreferences settings = context.getSharedPreferences(PREFERE...
2019-06-22 16:40:40
274
原创 Android工具类之GZip
public class GzipUtil { public static final String GZIP_ENCODE_UTF_8 = "UTF-8"; public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1"; private static final char ARRAY_LEFT = ...
2019-06-04 20:21:48
482
原创 Android工具类之屏幕处理
public class ScreenUtil { /**将px值转换为dip或dp值,保证尺寸大小不变*/ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().densi...
2019-06-04 20:13:35
298
原创 Android工具类之内存信息获取
public class MemInfoUtil { public static List<String> getMemInfo() { List<String> result = new ArrayList<>(); try { String line; Buffer...
2019-06-04 20:11:04
377
原创 Android工具类之CPU信息获取
public class CpuUtils { private static final String TAG = CpuUtils.class.getSimpleName(); public static final String AARCH_64 = "aarch64"; public static final String STRING_OX = "0X"; ...
2019-06-04 20:08:58
675
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人