- 博客(52)
- 收藏
- 关注
原创 Android 自定义标题(适用MVP框架)
之前写过一篇关于自定义标题的文章,但使用起来还是不方便,尤其是和MVP框架结合的时候。所以这次再写一篇可以与MVP框架结合的。之后相关的文章也会更新。自定义View-TitleBarMVP框架TitleBarpublic class TitleBar { /** * 默认标题栏(带后退按钮) * * @param context 上下文 * @param title 标题 * @pa.
2022-03-24 14:53:07 2489
原创 Android 设置状态栏沉浸式
public class StatusBarUtil { private static final int DEFAULT_ALPHA = 112; private static final int DEFAULT_ALPHA_NO_TRANSPARENT = 0; private static final int FAKE_STATUS_BAR_VIEW_ID = R.id.statusBarUtil_fake_status_bar_view; /** * 状
2022-03-23 11:18:08 4098
原创 MVVM框架第二篇 Navigation
一.Navigation介绍Fragment的管理是件麻烦的事,使用方法是用FragmentManager和FragmentTransaction来管理它们之间的切换,包括切换动画和数据传递等。所以Android Jetpack 提供Navigation来帮助我们管理Fragment。二.Navigation的元素Navigation Graph:新型的XML资源文件,包含应用程序的页面以及页面间的关系。NavHostFragment:特殊的Fragment,Navigation Graph的
2022-03-12 23:46:12 3419
原创 Android 软件实现开机自启动。
第一步:增加权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />第二步:定义广播public class BaseReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("android.int
2022-02-22 13:08:28 1351
原创 CountDownTimer封装
public class CountDownTimerManager { /** * 总倒计时 */ private long millisInFuture = 0; /** * 回调时间 */ private long countDownInterval; /** * 倒计时完成回调 */ private FinishCountDown finishCountDown; /**
2022-02-17 15:10:32 1599
原创 MVVM框架第一篇 LifeCycle
一.LifeCycle介绍解耦在软件开发中占据很重要的位置,正常组件在使用过程中需要依赖系统组件的生命周期。在onCreate或onResume方法初始化,在onPause中停止,在onDestroy中进行资源回收。这可能引发内存泄漏。LifeCycle为此而生,可以加强对自定义组件的管理,不依赖页面生命周期的回调方法。二.简单使用我们很多的需求都需要在onResume进行初始化,onPause进行停止。如NFC或获取地理位置等public class MainActivity extends
2022-02-12 22:53:14 1225
原创 RecyclerView分页滑动
框架RecyclerView基类封装第一步:准备工作 api 'com.android.support:recyclerview-v7:26.1.0'PagingScrollHelperpublic class PagingScrollHelper { private RecyclerView mRecyclerView = null; private MyOnScrollListener mOnScrollListener = new MyOnScrollListene
2021-10-25 11:19:12 1006
原创 根据滑动完成Activity切换
引用Activity跳转封装第一步:将OnGestureListener接口封装public class SlideListener implements android.view.GestureDetector.OnGestureListener { private Context context; private Class<? extends Activity> leftCls; private Class<? extends Activity&g
2021-10-19 11:44:00 278
原创 Android 封装okhttp3网络请求拓展
本篇只展示更新的代码,没有变化的就不贴了。上一篇 :Android 封装okhttp3网络请求更新内容:上传文件下载文件表单post请求增加时间限制JsonParsepublic class JsonParse { private Object responseBodyResult; public Object getResponseBodyResult() { return responseBodyResult; } /**
2021-09-10 14:13:59 219
原创 Android 封装okhttp3网络请求
本次封装针对get和post依赖 implementation 'com.squareup.okhttp3:okhttp:3.8.0' implementation 'com.squareup.okio:okio:3.0.0-alpha.6' implementation 'com.google.code.gson:gson:2.8.5'权限<uses-permission android:name="android.permission.INTERNET" />准备工作:R
2021-09-09 14:55:17 416
原创 【android】自定义控件动画篇之视觉动画
Android的动画由5种类型组成:alpha,scale,translate,rotate,setalpha:渐变透明度scale:渐变尺寸translate:画面变换位置rotate:画面旋转set:动画集
2021-09-05 13:50:41 319
原创 【android】自定义控件基础第三篇
一.Region1.直接构造public Region()public Region(Region region)public Region(Rect r)举例public class BasisView extends View { public BasisView(Context context) { super(context); } public BasisView(Context context, @Nullable AttributeSe
2021-09-04 10:46:22 111
原创 【android】自定义控件基础第二篇
一.RectF与Rect1.是否包含某个点boolean contains(float x, float y)根据这个可以写一个例子:绘制一个矩形,判断手指是否在范围内。public class BasisView extends View { private int mX, mY; private RectF rectF; private Paint mPaint; public BasisView(Context context) { su
2021-09-04 00:29:59 315
原创 【android】自定义控件基础第一篇
想要画出自定义控件需要画笔(Paint)和画布(Canvas)一.Paint基础使用//是否抗锯齿void setAntiAlias(boolean aa)//设置颜色void setColor(int color)//设置样式void setStyle(Paint.Style style)Paint.Style.FILL:仅填充内部Paint.Style.STROKE:仅描边Paint.Style.FILL_AND_STROKE:填充内部与描边//设置宽度void s.
2021-09-03 23:13:32 102
原创 时间工具类
@SuppressLint({"SimpleDateFormat"})public class TimeUtils { public static String COMPLETE_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static String DATE_FORMAT = "yyyy-MM-dd"; public static String TIME_FORMAT = "HH:mm:ss"; /** * 获取当
2021-08-24 17:50:03 77
原创 编写双击事件
public class OnDoubleClickListener implements View.OnTouchListener { private DoubleClickCallback clickCallback; private long lastClickTime; public OnDoubleClickListener(DoubleClickCallback clickCallback) { this.clickCallback = clickC
2021-08-24 17:47:41 141
原创 Activity进入退出动画
1.平移activity_next_enter<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="100%p" android:toXDelta="0"></translate>activi
2021-08-19 17:38:25 339
原创 定时消失弹框
准备工作1.调用参数 <!--颜色--> <color name="transparent">#00000000</color> <color name="black">#000000</color> <color name="white">#FFFFFF</color> <!--字体大小--> <dimen name="text_size_16sp">16sp
2021-08-19 11:42:04 203
原创 通用双按钮或单按钮弹框
准备工作1.颜色值 <color name="white">#FFFFFF</color> <color name="black">#000000</color> <color name="gray">#c8c7cc</color> <color name="deep_blue">#616EFD</color> <!--透明--> <color name="
2021-08-19 11:35:07 236
原创 Activity跳转封装
public class ActivityManager { /** * activity跳转不带参数 * * @param context 上下文 * @param cls 目标 */ public static void goActivity(Context context, Class<? extends Activity> cls) { startActivity(context, cls, nu
2021-08-11 14:42:48 316
原创 单例模式封装Activity管理类
public class AppManager { private Stack<Activity> activityStack; private AppManager() { activityStack = new Stack<>(); } public static AppManager getInstance() { return AppHolder.appManager; } private
2021-08-10 14:35:32 162
原创 Glide 完结篇
自定义模块大部分情况下,只需要一行代码就能加载图片。当我们需要更改默认配置时,就需要自定义模块了。首先定义自己的模块类。public class MyGlideModule implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { } @Override public void registerComponents(
2021-08-09 17:30:41 120
原创 Glide 精通篇
异常日志记录 RequestListener<String, GlideDrawable> requestListener = new RequestListener<String, GlideDrawable>() { @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean
2021-08-09 15:27:14 72
原创 Glide 进阶篇
缓存skipMemoryCache(true/false) 是否跳过内存缓存。skipMemoryCache 这就表示Glide不会将图片放到内存缓存中。默认为false,所有使用时可以不用调用。 Glide.with(this) .load("地址") .skipMemoryCache(true) .into(imageView);当跳过内存缓存时,Glide仍会使用磁盘缓存来避免重复的网络请求。
2021-08-09 11:23:45 408
原创 Glide 基本使用篇
引入依赖implementation 'com.github.bumptech.glide:glide:3.6.1'简单使用对一个完整的功能请求,Glide 建造者要求最少有三个参数。with 传入contextload 图片地址into 控件例子: ImageView imageView = findViewById(R.id.img); Glide.with(this) .load("图片地址") .into(im
2021-08-09 09:56:39 257
原创 Log工具类
public class L { private static boolean isDebug; private static String TAG = "log"; public static void init() { isDebug = BuildConfig.DEBUG; } public static void v(String msg) { if (isDebug) { Log.v(TAG, m
2021-08-06 10:01:35 169
原创 自定义View-TitleBar
title_bar.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="6
2021-06-07 17:03:32 185
原创 Android 代码添加布局
我们在工作中经常需要用到在代码中动态添加布局,之前写仿IOS底部弹出框的时候就用到了这方面的用法。仿IOS底部弹出框这次简单的写一下。activity_main<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools
2021-06-07 09:31:56 742 2
原创 自定义进度条弹框
添加百分比布局依赖 implementation 'com.zhy:percent-support-extends:1.1.1'value文件夹添加颜色值 <color name="transparent">#00000000</color><!--透明--> <color name="gary">#e8eaef</color><!--灰--> <color name="white">#FFFFFF</c
2021-05-06 16:52:37 224
原创 Android build相关用法
文章目录一.使用signingConfigs进行打包一.使用signingConfigs进行打包1.首先我们要有jks文件
2021-04-25 17:17:19 302
原创 像素,键盘,文本框控制
一.dp与px之间的转行/** * 像素工具类 */public class PixelUtils { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) * @param context 上下文 * @param dpValue dp值 * @return px值 */ public static int dip2px(Context context,float dpValue){ // 获取当前手机
2021-04-17 18:23:14 161
原创 SD卡目录杂记
获取手机上的SD卡信息通过Environment类实现,该类是APP获取各种目录信息的工具。 //根目录路径 String rootAbsolutePath = Environment.getRootDirectory().getAbsolutePath(); //数据目录路径 String DataAbsolutePath = Environment.getDataDirectory().getAbsolutePath(); //下载缓存目录路径 String downloadCa
2021-04-17 10:22:17 165
原创 等待弹框使用Dialog封装
首先是相关的资源文件dialog_background<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="20dp" /> <solid android:color="@color/black" /></shape>
2021-04-17 09:48:07 144
原创 Android MD5加密
介绍MD5加密时不可逆的加密算法,也就是无法解密,主要用于客户端的用户密码加密。使用public class MD5Util { /** * 字符串加密 * * @param raw 字符串 * @return 加密后的字符串 */ public static String encrypt(String raw) { String encryptString = raw; try {
2021-03-20 18:33:29 406
原创 Android MVP框架封装
参考Android Activity与Fragment基类封装Android ButterKnife基础篇结构基本框架BaseActivitypublic abstract class BaseActivity extends AppCompatActivity implements IBaseView { /** * 获取布局文件ID * * @return 返回布局ID */ protected abstract int g
2021-03-18 15:55:36 331
原创 Android listview+RecyclerView基类封装,通用adapter之多条目封装(完结篇)
参考Android listview基类封装,通用adapter之单条目封装(进阶篇)CommonHolderpublic class CommonHolder { /** * 控件ID */ private SparseArray<View> views; /** * 视图 */ private View convertView; private CommonHolder(Context contex
2021-03-17 13:33:12 407
原创 Android listview基类封装,通用adapter之单条目封装(进阶篇)
CommonAdapterpublic abstract class CommonAdapter<T> extends BaseAdapter{ private Context mContext; protected List<T> data; private int mItemLayoutId; protected CommonAdapter(Context context, List<T> data, int mItemLayou
2021-03-16 09:57:45 138
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人