自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 安卓知识总结目录(2019-12-03)

一直以来写的都很零碎不成体系,今天是时候解决这个问题,既方便了阅读,也有利于知识的归纳总结初始化开启应用程序时我们一般会写一个MyApp类继承Application,然后提供全局Application和提前初始化一些方法,这里采用的是kotlin的顶层属性方法,具体实现如下:全局Application和提前初始化SharedPreferences自安卓6.0开始便需要动态授权,这里...

2019-11-11 14:55:29 196

原创 自定义本周日历

自定义本周日历

2022-10-13 16:43:30 333 1

原创 安卓自定义角标

之前有写过一篇自定义角标,使用起来不怎么好用,于是重新写了一个。本次是继承AppCompatImageView,在此基础上设置Padding画角标。

2022-09-21 18:32:18 654

原创 Android API 30后设置系统栏

从Android API 30开始,setSystemUIVisibilty就不被推荐使用了,而是使用WindowInsetsController

2022-06-17 17:59:38 1366

原创 从0开发打造视频播放器

从零打造视频播放器,实现视频播放、rtsp流播放、视频比例切换、全屏切换

2022-06-06 10:57:00 1043

原创 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

原创 安卓折叠布局的简单使用

网上折叠布局的文章大多引用的官方代码,并不是那么容易看懂,这里抛砖引玉写了一个简单的折叠功能

2021-12-29 18:15:09 1868

原创 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

mysql-5.0.22-win32

mysql-5.0.22-win32

2015-08-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除