自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 资源 (44)
  • 收藏
  • 关注

原创 Glide添加token和userId

【代码】Glide添加token和userId。

2024-04-28 10:07:55 360

原创 Path类中的moveTo和lineTo

1、moveTomoveTo 不会进行绘制,只用于移动移动画笔。结合以下方法进行使用。2、lineTolineTo 用于进行直线绘制。mPath.lineTo(300, 300);canvas.drawPath(mPath, mPaint);默认从坐标(0,0)开始绘制。刚才我们不说了moveTo是用来移动画笔的吗?mPath.moveTo(100, 100);mPath.lineTo(300, 300);canvas.drawPath(mPath, mPaint);把画笔移动

2021-06-24 10:49:10 2696

原创 组件化开发

传统的开发模式是将所有的东西都丢到APP模块里面,项目越做越大,适合组件化开发。组件化分三层:1. 业务逻辑层2. 公共层(第三方库,框架)3. 系统层组件化开发的优势:1.编译速度每一个模块都是Application,只需要单独编译我的这个模块,别的模块不需要编译,节省时间2.超级解耦每个模块都是没有关联的,拆分成各个模块.模块之间是彼此之间是不关联的,彼此之间是没有任何耦合的3.功能重用不需要再copy过来,直接单独依赖这一模块就行4.便于团队开发节省

2021-05-24 11:06:30 2164 6

原创 实现一个网络框架HttpURLConnection

1.写一个接口public interface IHttpRequest { void setUrl(String url); void setData(byte[] data); void setListener(CallbackListener callbackListener); void execute();}2.实现一个线程池,去处理请求,这个是一个单例这里有2个队列:LinkedBlockingDeque和ArrayBlockingQ.

2021-05-17 11:17:09 307

原创 Kotlin实现上传多张图片(包含拍照和相册功能)

效果图:核心代码:清单文件里写上权限:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.uploadpictures"> <uses-permission android:name="android.permission.IN

2021-05-12 16:13:37 2172 5

原创 Kotlin自定义View实现一个通用的控件

效果图如下:核心代码如下:open class CommonItemView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, mode: Int = MODE_TEXT) : RelativeLayout(context, attrs, defStyleAttr) { companion object { const val

2021-05-12 10:48:42 1378

原创 Kotlin实现详情页效果

效果图如下:视频演示:核心代码:class MainActivity : AppCompatActivity() { private lateinit var pictureAdapter: DetailBannerAdapter private lateinit var goodAdapter: GoodAdapter private var pictureSize = 0 private val pic1 = "https://img0.baidu.

2021-05-10 17:07:40 185 1

原创 Kotlin中animateLayoutChanges的使用

实现如下的动画效果:核心代码如下:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" and

2021-05-10 11:08:30 275

原创 Kotlin用容器的方式实现单选和多选

多选的效果图:核心代码如下:class MainActivity : AppCompatActivity() { private val mPopupWindow: FilterPopupWindow by lazy { FilterPopupWindow(this) } private val mList = mutableListOf<String>() override fun onCreate(savedInstanceState: Bund

2021-05-08 17:43:02 288

原创 Android和H5相互调用

h5调用app: webview.addJavascriptInterface(object : Object() { @JavascriptInterface fun setPageTitle(title: String) { runOnUiThread { titleTv.text = title }

2021-05-08 10:55:33 318

原创 Kotlin实现单选和多选

最终效果:核心代码:object OrderViewCenter { /** * 创建RadioButton */ fun createTripRadioButton(context: Context, radioId: Int): RadioButton { val btn = RadioButton(context) btn.id = radioId val params = RadioGroup.Layo

2021-05-07 17:00:52 1227 2

原创 Kotlin实现根据网络数据实现单选效果

最终的效果展示:核心代码:先准备数据源:class MainActivity : AppCompatActivity() { private var specialRequestOptionList: MutableList<SpecialRequestOptionListBean> = mutableListOf() override fun onCreate(savedInstanceState: Bundle?) { ..

2021-05-07 10:55:25 195 2

原创 常用锁的使用方法

解决下面这个并发问题public class MainActivity extends AppCompatActivity { private int i = 60000;//共享变量,库存60000 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout

2021-03-26 13:35:47 310

原创 单例模式的5种实现方式

单例模式:简单来说一个类只能构建一个对象特征:1、私有构造函数2、静态方法返回单例类的对象3、保证单例类对象只有一个,要注意多线程场景4、如果单例对象在反序列化时,不会重新创建对象 外面通过暴露的静态方法来创建单例对象懒汉式public class Singleton { private Singleton() {} //私有构造函数 private static Singleton instance = null; //单例对象 //静态工厂方

2021-03-25 14:38:36 291 6

原创 四种引用类型

强引用 Object obj = new Object()软引用 内存不足时回收弱引用 GC到来时回收虚引用 GC回收时会得到一个通知测试软引用 private void testSoftReference() { User user =new User(1,"xiaoming"); SoftReference<User> softReference = new SoftReference<User>(user);

2021-03-25 10:36:27 95 2

原创 实现所有Activity全部销毁

一、使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,并且容易理解、易于操作,非常不错!ActivityController类(储存每一个Activity,并实现关闭所有Activity的操作)import android.app.Activityimport java.util.*object ActivityController { private val

2021-03-18 15:53:09 164

原创 Activity生命周期

正常情况下的生命周期Activity启动–>onCreate()->onStart()->onResume()点击home键回到桌面->onPause()->onStop()再次回到原Activity时->onRestart()->onStart()->onResume()退出当前Activity时–>onPause()->onStop()->onDeatory()锁屏时->onPause()->o

2021-03-18 14:01:09 137

原创 应用内跳转Scheme协议

设置协议xiechengtrip://message/approval/detail?approvalId={approvalId}&approvalFlowId={approvalFlowId}2 1、在Androidmanifest.xml中定义scheme <activity android:name=".ui.main.approval.detail.ApproveDetailActivity" android:screenOr

2021-03-18 11:24:02 173

原创 使用控制台给apk签名

将内容复制到控制台: 复制完以后直接点击右键复制控制台中的内容:先选择想要复制的内容 ,然后在窗口标题栏上右击鼠标,再选择菜单“编辑”-“复制”。注意,是在窗口标题栏上右击鼠标,而不是在窗口内。1、先切换目录到2、输入命令jarsigner -verbose -keystore [签名秘钥文件路径] -signedjar [签名后apk的文件路径] [未签名apk的文件路径] [证书别名]例子:D:\Android\Android Studio\jre\bin>j...

2021-03-15 10:43:22 138

原创 Retrofit源码解析

Retrofit的使用1.创建网络请求的接口public interface GetApi { /** * 获取用户信息 * @return * @Query 注解 */ @GET("getUserInfo") Call<UserInfo> getUserInfo(@Query("id") String userId);}2. 创建Retrofit实例private Retrofit retrofit;

2021-01-29 16:36:44 321 2

原创 Okhttp源码解析

Socket和TCP是什么关系?Socket对TCP/IP的一个抽象的实现OSI七层模型 TCP/IPHTTP是处于最底层应用层的协议,负责进行数据的收发,规定类数据的格式,用什么传输?传输借助于下一层协议 TCP协议 传输层协议 传输数据,确定往哪里传?借助TCP的下一层协议网络层协议: IP协议 确定传输的目的地TCP和IP的连接就是借助Socket连接,建立好了Socket连接,我们要来完成HTTP通信的话,就是把我们的数据组装成HTTP的报文,使用Socket的Outp.

2021-01-28 16:56:58 387

原创 okhttp

okhttp分为两个部分:(1)分发器(2)拦截器因为我们的okhttp支持并发的请求,不是一次只帮你处理一个网络请求,它是支持并发的。那么分发器它是帮助我们将我们提交给okhttp的各种请求去进行一个任务的分配,那么提到并发,就想到了并发编程相关的知识点,想到了多线程,想到了线程池,那么分发器她里面就配置了一个线程池。我们的异步请求任务,都会在这个线程池里面去提交一个任务,除了分发器之外呢,还有就是我们的拦截器。okhttp里面有五大默认的拦截器,采用责任链的设计模式。除了

2021-01-27 11:10:00 221

原创 算法题练习

算法题是一串字母判断是否为合法字符串,规则有三 (1).字母可以全部是大写 (2).字母可以全部是小写 (3).可以首字母是大写,其余字母全小写 除此之外全不合法,返回值为布尔型,合法返回True,不合法返回False答案: public boolean isLegalWord(String world) { Pattern pattern1 = Pattern.compile("[a-z]*"); Pattern pattern2 = Pattern.c.

2021-01-26 20:34:52 130

原创 友盟推送小米手机通知栏图标显示问题

最近发现小米手机通知栏的icon显示成了一个灰色的方块,如图所示发现友盟不支持自定义通知图标意思是 小米的设备,是无法自定义图标的,这个显示的默认图标是无法进行修改的。我自己按照小米推送的推送通知的要求,对于icon有特殊要求地址如下https://dev.mi.com/console/doc/detail?pId=2328#_0_3实现的效果如下:然后设置他的颜色Notification notif = new Notification.Builder(.

2021-01-11 16:25:49 2739

原创 LinkedList源码解析二

双向链表的优势:遍历效果优于单向链表。每个节点类似如下结构:定一个静态内部来Node来表示该结构: private static class Node<E> { Node<E> next; Node<E> prev; E element; public Node(Node<E> prev, Node<E> next, E element) { .

2020-11-03 20:01:11 111

原创 LinkedList源码解析一

我们都知道ArrayList称为动态数组集合,所谓的动态数组,并不是说数组的大小可以发生改变,我们都知道,在创建数组的时候都需要指定数组的长度,一旦数组创建,数组的长度是不能改变的。那么ArrayList是如何实现动态数组的方式呢,可以看之前的文章ArrayList源码分析一,概括来说就是调用ArrayList在Add方法进行元素添加的时候,会判断能不能装下新添加的元素,如果能放下就放到数组里面去,如果放不下,ArrayList就会新开辟一个数组,同时将原数组里面的数据拷贝到新数组里面去,同时把添加的元

2020-11-02 11:25:14 90 2

原创 跨进程通信AIDL的使用

绑定服务的过程首先创建一个Servicepublic class MyService extends Service { public MyService() { } @Override public IBinder onBind(Intent intent) { return new IMyServiceInterface.Stub() { @Override public void basic

2020-10-20 19:29:14 114

原创 ArrayList源码分析四

接下来我们来自定义一个ArrayListpackage com.example.suanfademo;public class MyArrayList<E> { //定义数组,用于存储集合的元素 private Object[] elementData; //定义变量,用于记录数组的大小 private int size; //定义空数组,用于在创建集合对象的时候给elementData初始化 private Object[] em.

2020-10-16 17:10:30 93

原创 ArrayList源码分析三

问题一:ArrayList如何扩容?第一次扩容是10,后面扩容是原来集合大小的1.5倍问题二:ArrayList添加海量数据 ArrayList list =new ArrayList(); list.add("Android"); list.add("Java"); list.add("PHP"); long startTime = System.currentTimeMillis(); for (int i = 0; i < 100000; i+

2020-10-14 17:53:57 115 2

原创 ArrayList源码分析二

ArrayList源码分析ArrayList有三个构造方法:1.无参构造方法 public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }ArrayList中储存数据的其实就是一个数组,这个数组就是elementData,默认大小是10.2.有参构造函数一...

2020-10-13 15:39:15 243 2

原创 ArrayList源码分析一

前言我们知道如果在一个已知数组 int[] array ={1,2,3,4}里面再追加一个元素5,我们不能直接把元素添加到数组后面,因为数组的长度是不可以改变的,常见的方法是创建一个新的数组,而且需要把原来数组里面的元素一个一个的拷贝进来,然后在新数组后面添加元素。这个过程非常的麻烦,既要创建新的数组又要移动数组的元素。如果我们想要删除一个索引下面的元素;例如一个数组 int[] array ={1,2,3,4},我想把索引2下面的元素3删除掉,数组长度变成3,使数组变成 int[] array =

2020-10-12 19:25:45 107

原创  我们在桌面上打开一个应用经历的流程

一个APP的创建是从ActivityThread.main()开始的。 public static void main(String[] args) { Looper.prepareMainLooper(); //开启消息队列循环 ActivityThread thread = new ActivityThread(); thread.attach(false, startSeq); ...

2020-10-09 16:15:39 317

原创 ScrollView+ListView滑动冲突Demo

知识点: 一个典型的触摸事件会经历,DOWN->MOVE->UP。通过MotionEvent我们可以得到相应触摸事件发生的坐标x、y。为此,系统提供了两组方法获取事件坐标。getX/getY和getRawX/getRawY。这两组方法是有区别的,getX/getY返回的是相对于当前View左上角的x和y坐标,而getRawX/getRawY返回的是相对于手机屏幕左上角的x和y坐标。本例是Scrollview嵌套ListView的demo。<?xml version=..

2020-10-09 11:15:49 126

原创 事件分发机制和滑动冲突

事件的种类事件的种类 意思 diapatchTouchEvent 手指按下 View onInterceptTouchEvent 手指在 View 滑动 onTouchEvent 手指抬起 要注意的是 Activity 和 View 是没有 onInterceptTouchEvent() 方法的。事件分发流程测试代码public class MainActivity extends AppCompatActivity ...

2020-09-27 14:52:13 279

原创 内联函数inline

内联函数内联函数的语义很简单:把函数体复制粘贴到函数调用处。inline fun myCalculate(a: Int, b: Int) = a + bfun test() { myCalculate(1, 2) myCalculate(3, 4) myCalculate(5, 6)}用关键字 inline 标记函数,该函数就是一个内联函数。还是原来的 test() 方法,编译器在编译的时候,会自动把内联函数 myCalculate() 方法体内...

2020-09-03 10:09:16 206

原创 Handler发送消息的方式

方式1:使用 Handler.sendMessage()此处以 匿名内部类 的使用方式为例步骤1:在主线程中 通过匿名内部类 创建Handler类对象 private Handler mhandler = new Handler(){ // 通过复写handlerMessage()从而确定更新UI的操作 @Override public void handleMessage(Message ms

2020-08-13 10:12:22 5412

原创 HandlerThread

HandlerThread是什么HandlerThread继承自Thread,因此HandlerThread其实就是一个线程。线程开启时也就是run方法运行起来后,线程同时创建一个含有消息队列的looper,并对外提供自己这个对象的get方法,这就是和普通的Thread不一样的地方。可用于多个耗时任务要串行执行。使用流程1.实例对象,参数为线程名HandlerThread handlerThread = new HandlerThread("handlerThread");2.启动线

2020-08-12 13:48:46 445

原创 主线程给子线程发送消息

package com.example.customviewdemo;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;.

2020-08-12 09:52:27 867

原创 Kotlin学习之协程

协程是什么?一个线程框架,其实就是一套由Kotlin官方提供的线程API。就像 Java 中的Executor和 Android 中的AsyncTask,Kotlin 中的协程也有对 Thread API 的封装,让我们可以在写代码时,不用关注多线程就能够很方便地写出并发操作。协程好在哪里?方便。可以在同一个代码块里进行多次的线程切换。协程最常用的功能是并发,而并发的典型场景就是多线程。可以使用Dispatchers.IO参数把任务切到 IO 线程执行:coroutineSc...

2020-08-05 20:00:27 379

原创 Kotlin学习之集合

Kotlin严格区分可变集合和不可变集合,要清楚的一点是,区分开可变集合的只读视图与实际上真正不可变的集合override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main20) var stringList: MutableList<String> = mut

2020-08-01 10:10:44 383

AndFixDemo.7z

打release包,bug版本打包生成old.apk ,修复后的版本再打包生成new.apk,放到下面的问价夹中,再把签名文件.jks也复制来

2020-07-06

AndFixDemo.7z

AndFixDemo 使用阿里的AndFix实现热修复 替换掉产生Bug的方法实现热修复,即时生效。避免发版修复线上问题

2020-07-06

CustomViewPager.7z

自定义ViewGroup实现ViewPager 包括解决滑动冲突,使用onMeasure onLayout

2020-05-08

FramWorkDemo.7z

框架框架框架框架框FramWorkDemo.7z

2020-01-08

FlowLayout.zip

流式布局,支持margin 和padding,自定义View.

2019-09-19

ExpandAndCollapseRecyclerView.zip

RecyclerView表格显示分类,展开和收起功能,每个item都会有分割线

2019-05-12

自定义ToggleButton

自定义View实现ToggleButton,包含事件冲突的解决,onClick和onTouch同时发生

2019-01-31

自定义ViewPager实现Banner

自定义ViewPager实现Banner,知识点包含按下或者滑动的过程中停止轮播

2019-01-30

买单练习 满赠 赠品选择商品

买单练习 多选 取消选择 赠品选择 保存选择的商品 满赠活动

2018-07-13

CoordinatorLayouts

博客地址https://blog.csdn.net/jingerlovexiaojie/article/details/80983602

2018-07-11

TagTextView 每一行添加多个活动标签

TagTextView 每一行添加多个活动标签 效果可以看 https://blog.csdn.net/jingerlovexiaojie/article/details/80833155

2018-06-28

RecyclerView 最新添加的item在最上面

效果可以看https://blog.csdn.net/jingerlovexiaojie/article/details/80091681

2018-04-26

PopupWindow里面动态添加内容

效果可看https://blog.csdn.net/jingerlovexiaojie/article/details/80090390

2018-04-26

PopupWindow 一般商城都用得到 有综合排序

PopupWindow 一般商城都用得到 有综合排序 效果可以看http://blog.csdn.net/jingerlovexiaojie/article/details/79003839

2018-01-08

滑动删除控件

滑动删除控件 效果http://blog.csdn.net/jingerlovexiaojie/article/details/78989153

2018-01-06

标签控件 流式布局 实现多选

标签控件 流式布局 实现多选 可以取消选择 效果http://blog.csdn.net/jingerlovexiaojie/article/details/78977681

2018-01-05

标签控件 流式布局 实现单选

FlowLayout 实现单选 取消选择 保存选择状态 以setAdapter形式注入数据 效果http://blog.csdn.net/jingerlovexiaojie/article/details/78977681

2018-01-05

实现热门标签控件 FlowLayout

FlowLayout 流式标签 标签控件 自动换行效果 参照效果http://blog.csdn.net/lmj623565791/article/details/38352503

2017-12-19

dialog 弹出窗和底部弹出窗的实现和动画效果

dialog 弹出窗和底部弹出窗的实现和动画效果,中间弹出和底部弹出

2017-12-18

RecyclerView之ItemDecoration由浅入深 练习Demo

RecyclerView之ItemDecoration由浅入深 练习Demo 出处http://www.jianshu.com/p/b46a4ff7c10a

2017-12-13

flutter_2.2.0.zip

安装包

2021-05-27

ARouterDemo.7z

ARouterDemo.7z

2021-05-24

sourceTree.7z

安装包资源

2021-05-24

OkHttpDemo.7z

一个网络框架

2021-05-17

UpLoadPictures.7z

上传多张图片

2021-05-12

ToggleButtonDemo.7z

开关按钮

2021-05-12

OrderItemViewDemo.7z

自定义VIew通用控件

2021-05-12

DetailInfoDemo.7z

详情页的效果

2021-05-10

AnimationDemo.7z

animateLayoutChanges的使用

2021-05-10

SelectPopupWindow.7z

Kotlin的方式实现单选和多选

2021-05-08

Kotlin实现单选和多选

Kotlin实现单选和多选

2021-05-07

HotelRequireDemo.7z

Kotlin实现单选

2021-05-07

MVPAndJepackDemo.7z

MVPAndJetPackDemo

2021-02-05

常用直播工具类.7z

直播工具类

2020-07-23

MLVB-TuSdk-Demo.zip

安卓直播demo

2020-07-20

tencent安卓美图工具

安卓美图工具

2020-07-17

DialogFragmentDemo.7z

DialogFragment弹窗(带黑色透明背景和不带黑色透明背景) 博客地址:https://blog.csdn.net/jingerlovexiaojie/article/details/107384617

2020-07-16

直播播放视频常用工具类

直播播放视频常用工具类

2020-07-16

LiveUserDemo.7z

直播用户进入房间离开房间添加僵死粉更新用户信息 博客地址https://blog.csdn.net/jingerlovexiaojie/article/details/107359874

2020-07-15

TinkerDemo.7z

Android 热修复技术 实现tinker热修复 博客地址:https://blog.csdn.net/jingerlovexiaojie/article/details/107197864

2020-07-14

空空如也

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

TA关注的人

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