- 博客(88)
- 资源 (1)
- 收藏
- 关注
原创 安卓知识总结目录(2019-12-03)
一直以来写的都很零碎不成体系,今天是时候解决这个问题,既方便了阅读,也有利于知识的归纳总结初始化开启应用程序时我们一般会写一个MyApp类继承Application,然后提供全局Application和提前初始化一些方法,这里采用的是kotlin的顶层属性方法,具体实现如下:全局Application和提前初始化SharedPreferences自安卓6.0开始便需要动态授权,这里...
2019-11-11 14:55:29 196
原创 安卓自定义角标
之前有写过一篇自定义角标,使用起来不怎么好用,于是重新写了一个。本次是继承AppCompatImageView,在此基础上设置Padding画角标。
2022-09-21 18:32:18 654
原创 Android API 30后设置系统栏
从Android API 30开始,setSystemUIVisibilty就不被推荐使用了,而是使用WindowInsetsController
2022-06-17 17:59:38 1366
原创 objectbox数据库
一、引入在项目build文件中repositories { google() jcenter() mavenCentral()}dependencies { classpath 'com.android.tools.build:gradle:4.0.2' classpath "io.objectbox:objectbox-gradle-plugin:2.9.1"}在app的build文件中apply plugin: 'io.objectbox
2021-12-31 11:53:40 989
原创 MVVM模式快速开发
gitee地址:白云天/MVVMTemplate (gitee.com)在Activity中使用1.首先定义BaseActivitypublic abstract class BaseActivity extends AppCompatActivity { public Context mContext; public abstract int getLayoutResID(); @Override protected void onCreate(@Nul
2021-09-16 10:18:18 265
原创 Recyclerview适配器2.0(八)——多布局的滑动拖拽
第八篇为多布局的滑动拖拽package com.example.recyclerview.recycler.provider.slide;import android.util.SparseArray;import android.view.View;import android.view.ViewGroup;import androidx.annotation.NonNull;import com.example.recyclerview.recycler.BaseViewHolde
2021-02-24 15:47:42 313
原创 Recyclerview适配器2.0(七)——滑动和拖拽
第七篇为滑动和拖拽package com.example.recyclerview.recycler.slide;import android.annotation.SuppressLint;import android.graphics.Canvas;import android.view.MotionEvent;import android.view.View;import androidx.annotation.NonNull;import androidx.recyclervi
2021-02-24 15:44:41 322
原创 Recyclerview适配器2.0(六)——多条目多布局
第六篇为多条目的多布局public abstract class BaseProviderMultiAdapter<T> extends BaseQuickAdapter<T, BaseViewHolder> { private final SparseArray<BaseItemProvider<T>> mItemProviders = new SparseArray<>(); /** * 返回 item 类型
2021-02-22 16:18:24 1160 1
原创 Recyclerview适配器2.0(五)——多布局
第五篇为多布局在第一篇有部分多布局的代码 //是否是多布局 protected boolean isMultiItem; //多布局所有的id集合 protected SparseIntArray layouts; /** * 单布局构造函数 */ public BaseQuickAdapter(@LayoutRes int layoutResId, List<T> data) { isMultiIt
2021-02-20 16:18:33 235
原创 Recyclerview适配器2.0(四)——基础Adapater完整代码
第四篇为BaseQuickAdapter的完整代码package com.example.recyclerview.recycler;import android.content.Context;import android.util.SparseIntArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.L
2021-02-20 16:13:59 171
原创 Recyclerview适配器2.0(三)——加载更多
第三篇为加载更多模块的搭建监听滑动到底部的事件/****加载更多模块*****///是否开启加载更多private boolean isOpenLoadMore = false;public static final int FOOTER_VIEW = 0x10000333;private LinearLayout mFooterLayout;private boolean isLoading = false;private View loadingView;private View
2021-02-20 16:12:21 222
原创 Recyclerview适配器2.0(二)——DiffUtil差量算法
第二篇为DiffUtil差量算法的搭建1.在基类adapter中重写onBindViewHolder@Overridepublic void onBindViewHolder(@NonNull VH holder, int position, @NonNull List<Object> payloads) { if (payloads.isEmpty()) { onBindViewHolder(holder, position); return
2021-02-20 16:04:59 839
原创 Recyclerview适配器2.0(一)
第一篇主要内容为基本功能的搭建(item点击、长按和子View的点击、长按)public abstract class BaseQuickAdapter<T, VH extends BaseViewHolder> extends RecyclerView.Adapter<VH> { protected abstract void convert(@NonNull VH holder, T item, int position); private Contex
2021-02-20 15:55:41 339 1
原创 ViewPager2正式版发布
ViewPager2正式版已经发布了,具体可以看官网文档,这里主要介绍用法一、引入使用ViewPager2需要导入implementation 'androidx.viewpager2:viewpager2:1.0.0'在xml中设置orientation, 或者在代码中设置setOrientation(),可以控制横纵向<androidx.viewpager2.wi...
2019-12-16 15:16:12 1557 1
原创 BaseMVVMActivity
BaseMVVMActivityimport android.app.DownloadManagerimport android.content.BroadcastReceiverimport android.content.Contextimport android.content.Intentimport android.content.IntentFilterimport a...
2019-12-02 09:23:26 990
原创 LocalBroadcastManager已被废弃
This class is deprecated.LocalBroadcastManager is an application-wide event bus and embraces layer violations in your app: any component may listen events from any other. You can replace usage of LocalBroadcastManager with other implementation of observab
2019-11-25 12:06:31 11388 10
原创 CameraX 概览
CameraX 是一个 Jetpack 支持库,旨在帮助您简化相机应用的开发工作。它提供一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。虽然它利用的是 camera2 的功能,但使用的是更为简单且基于用例的方法,该方法具有生命周期感知能力。它还解决了设备兼容性问题,因此您无需在代码库中包含设备专属代码。这些功能减...
2019-11-22 18:14:57 1524
原创 MVVM之DownLoadManager更新apk
基类代码BaseMVVMActivity在ViewModel中使用协程需要引入//viewModel协程implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-rc02'在ViewModel调用版本更新检测的方法class MainViewModel : ViewModel() { val...
2019-11-20 14:57:53 286
原创 Espresso之RecyclerView
测试RecyclerView需要导入androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0'使用示例//actionOnItemAtPosition的第一个参数是recycleview的item位置//第二个参数是对应的动作Espresso.onView(ViewMatchers.with...
2019-11-19 13:57:11 841
原创 MVVM之Architecture Components
Android Architecture Components 是谷歌在Google I/O 2017发布一套帮助开发者解决Android 架构设计的方案。里面包含了两大块内容:1.生命周期相关的 Lifecycle-aware Components2.数据库解决方案 Room本文主要为如何使用Lifecycle && LiveData && Vi...
2019-11-15 17:58:29 251
原创 MVVM之DataBinding模式的基本使用
简介View:主要进行视图控件的一些初始设置,不应该有任何的数据逻辑操作。Model:定义实体类,以及获取业务数据模型,比如通过数据库或者网络来操作数据等。ViewModel:作为连接 View 与 Model 的中间桥梁,ViewModel 与 Model 直接交互,处理完业务逻辑后,通过 DataBinding 将数据变化反应到用户界面上。配置在 Module:app...
2019-11-14 18:26:41 450
原创 Espresso测试示例
需要测试的Activity使用之前写过的一个界面,点击更新按钮便下载apk并更新,代码可见使用JobIntentService写一个下载服务class MainActivity : BaseMvpActivity<MainContract.View, MainContract.Presenter>(), MainContract.View { private v...
2019-11-13 14:25:01 689 1
原创 安卓安全问题手册
问题:RSA加密算法不安全使用带来的安全风险RSA加密算法是一种非对称加密算法。当其密钥长度过短,通常认为长度小于512位时,就会存在较高的被破解风险;没有使用正确的工作模式和填充方式,将会存在重放攻击的风险。因RSA加密算法不安全使用造成的加密方法失效,可能造成客户端隐私数据泄露、加密文件破解、传输数据被获取、中间人攻击等后果,导致用户敏感信息被窃取。解决方案使用RSA算法进行数字签...
2019-11-12 13:46:16 537
原创 常用工具类
经常使用的工具类@file: JvmName("Utils")package com.epuxun.drink.utliimport android.app.Applicationimport android.content.Contextimport android.content.SharedPreferencesimport android.graphics.Bitmap...
2019-11-11 14:48:35 124
原创 权限检测基类
权限检测基类abstract class BasePermissionsActivity : AppCompatActivity() { private val permissionsRequestCode = 100 //判断是否需要检测,防止不停的弹框 private var isNeedCheck = true private lateinit v...
2019-11-11 14:32:06 166
原创 使用JobIntentService写一个下载服务
利用封装好的BaseActivity方法开启JobIntentServiceval url = "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk"updateApk(url,APK_DOWNLOAD_SUCCESSFUL)//注册apk下载成功广播regist...
2019-11-11 14:26:50 816
原创 全局Application
全局Application使用的是Kotlin的顶层属性import com.epuxun.drink.utli.initApplicationclass MyApp : Application() { override fun onCreate() { super.onCreate() initApplication(this) }}...
2019-11-11 14:13:09 356
原创 封装BaseFragment
import android.content.Context;import android.os.Build;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view....
2019-10-28 15:27:35 433
原创 封装BaseActivity
BaseActivityimport android.app.AlertDialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import andr...
2019-10-28 12:01:45 762
原创 封装MVP模式
一、构筑1.创建View、Presenter和Model的接口public interface IView { Context getContext(); void showLoadDialog(); void dismissLoadDialog(); boolean isNetworkConnected(); void startActi...
2019-10-28 11:55:57 236
原创 Http工具类
网络请求在安卓开发中非常常见,写一个工具类能有效的节省开发时间提高效率,这里就分享一下,有不足的请斧正引入implementation("com.squareup.okhttp3:okhttp:4.2.1")需要的权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />...
2019-10-23 15:36:31 893
原创 自定义滑动验证
滑动验证实现方式有很多,这里是自定义View的方式,通过按住验证图片移动到目标阴影位置完成验证public class SlidingVerificationView extends View { //原图 private Bitmap bitmap; //画笔 private Paint paint; //阴影区域 private Rec...
2019-09-20 11:23:53 260
原创 自定义音视频基类六:ImageReader+GPUImage+MediaCodec
音视频这块从一个懵懵懂懂的新手到现在也快一个月了,越是学习越是感受到音视频开发的博大精深,每进一步都要花费很多精力,这篇文章是在前面学习的基础上对自己的总结,实现视频的采集+渲染+编码的基类现在9102下半年了,5.0以下的手机已经不多了,对音视频开发来说最低版本可以定位5.0了(个人意见如有错误请指正),便不再适配5.0以下手机,如果想适配5.0以下手机可以看看前面的几篇文章,自己修改一下...
2019-09-05 10:55:30 1731 1
原创 自定义音视频基类五
本章内容主要是简述音视频硬编码模块和部分逻辑改动使用示例 override fun init() { //开启surfaceTextureListener监听 textureView.surfaceTextureListener = surfaceTextureListener if (Build.VERSION.SDK_INT ...
2019-08-27 13:53:11 262
原创 自定义音视频基类四:采集篇总结
音视频开发采集部分需要的知识前三章中已经写明,这章是对前面三章的整理简化,首先上实现类,代码很简单,文末为基类代码class LiveBroadcastActivity : BaseVideoActivity() { //预览CaptureRequest.Builder private lateinit var previewCaptureRequest: CaptureR...
2019-08-26 10:35:53 300
原创 自定义音视频基类三
前两章介绍了音视频的采集,这章主要内容是适配5.0以下手机的视频采集,首先自然是老Api的基类代码//老相机id private var oldCameraId = Camera.CameraInfo.CAMERA_FACING_BACK //老相机SurfaceTexture private var oldSurfaceTexture:SurfaceTexture?...
2019-08-23 12:03:12 1025
原创 自定义音视频基类二
上一章简述了视频采集相关知识,本章为音频采集,音频采集相对视频采集简单了许多,在自定义基类中加入如下代码// 采样率 private val sampleRateInHz = 44100 // 音频通道 立体声: val stereo = AudioFormat.CHANNEL_IN_STEREO lateinit var audioRecord: Aud...
2019-08-23 09:27:11 1019
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人