自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

转载 图解apk的打包过程

编译打包步骤:1. 打包资源文件,生成R.java文件打包资源的工具是aapt(The Android Asset Packaing Tool)(E:\Documents\Android\sdk\build-tools\25.0.0\aapt.exe)。在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java,另外AndroidManifest.xml会被aapt编译成二进制。存放在APP的res目录下的资源,该类资源在APP打包前

2021-06-03 17:39:17 661

原创 CoordinatorLayout + AppBarLayout + RecyclerView实现典型可收缩ToolBar示例

<com.gh.zqzs.common.widget.swipeRefresh.SwipeRefreshLayout android:id="@+id/swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behav..

2021-01-11 16:57:19 435 1

转载 分析Kotlin协程实现原理

简单来说 Kotlin协程 一种异步编程的同步顺序写法,它跟线程是两个不同的概念,所以不要被 协程 两字弄混淆来看一下一个具体的场景:我们进行网络请求得到数据后处理数据,代码如下 fun setUpUI(){ val data = requestData() doSomethingElse() processData(data) } fun requestData(): String { Thread.sl.

2020-12-30 11:43:27 1732

原创 View的测量过程

本文主要讲解Android View绘制三大流程(measure,layout,draw)中的measure流程前言:为什么需要measure过程?我们在在绘制UI的时候,基本都是通过XML布局文件的方式来配置UI,而每个View必须要设置的两个群属性就是layout_width和layout_height,这两个属性代表着当前View的尺寸。所以这两个属性的值是必须要指定的,这两个属性的取值只能为三种类型:1、固定的大小,比如100dp2、刚好包裹其中的内容,wrap_con

2020-12-25 15:40:01 230

原创 Android-Gradle

1.Gradle介绍:1.1Gradle是什么?简单来说Gradle就是一个项目构建工具1.2Gradle 有什么用?它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑1.3Gradle是用什么语言编写的呢:Groovy基于Java并拓展了Java。 Java程序员可以无缝切换到使用Groovy开发程序。Groovy说白了就是把写Java程序变得像写脚本一样简单。写完就可以执行,Groovy内部会将其编译成Javaclass然后启动虚拟机

2020-12-25 11:34:18 91

原创 Android-Databinding

Android-Databinding简介Databinding 是一个实现数据和UI绑定的框架1.引入Android 2.1以上(API级别7+)Android 的 Gradle 插件版本不低于 1.5.0-alpha1android { .... dataBinding { enabled = true }}2.为什么要使用Data Binding?首先我们看一下传统的写法 一般情况下都是写一堆layout, 你通过f...

2020-12-25 10:50:55 237

原创 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和

提示: num1 和num2 的长度都小于 5100 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前导零 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式public String addStrings(String num1, String num2) { int maxLength = 0; if (num1.length() > num2.leng...

2020-12-22 15:53:48 712

原创 找到无序数组中最小的k个数

输入包含两行,第一行包含两个整数n和k(1 \leq k \leq n \leq 10^5)(1≤k≤n≤105),代表数组arr的长度,第二行包含n个整数,代表数组arr(1 \leq arr_i \leq 10^9)(1≤arri​≤109)。输出描述:输出包含一行,k个整数,代表数组中最小的k个整数。备注:时间复杂度O(nlog_2k)和O(n)O(nlog2​k)和O(n),额外空间复杂度O(n)O(n)​​​​​​​public static void main(St.

2020-12-21 23:46:38 369

原创 Java Lock和Synchronized区别

一:java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的)  (1)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock。    Lock 接口支持那些语义不同(重入、公平等)的锁规则,可以在非阻塞式结构的上下文(包括 hand-over-hand 和锁重排算法)中使用这些规则。主要的实现是

2020-12-05 22:59:08 2408

原创 图解八大排序算法——最详细的讲解

1.选择排序1.1 动图演示1.2 思路分析1.第一个跟后面的所有数相比,如果小于(或小于)第一个数的时候,暂存较小数的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是最小(或最大的数)2.下标移到第二位,第二个数跟后面的所有数相比,一趟下来,确定第二小(或第二大)的数重复以上步骤直到指针移到倒数第二位,确定倒数第二小(或倒数第二大)的数,那么最后一位也就确定了,排序完成。1.3 负杂度分析1.不管原始数组是否有序,...

2020-12-04 15:43:40 4665 1

转载 MVC、MVP、MVVM三种架构模式的区别

一、MVC(Model-View-Controller)MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。二、MVP(Model-View-Presenter)MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当桥梁,做到View-Model之

2020-12-02 16:51:36 414

原创 android 实现无限循环轮播

一丶不多说废话,直接看图效果二丶核心就是一个recyclerview,其本身就有一个 smoothScrollToPosition()滑动到指定的位置,但是这个过程很快,不是我们想要的效果, 这个方法里面最终调用的是LinearLayoutManager的smoothScrollToPosition()方法,所以我们需要重写LinearLayoutManager的smoothScrollToPosition()方法来控制滑动速度,接下来上代码:import android.content.Co

2020-07-03 19:06:28 1061

原创 Android Fragment在ViewPager中的延迟加载

当我们的app首页需要ViewPager + Fragment , 甚至Fragment中还继续嵌套ViewPager + Fragment 这样的嵌套层级时,每次首次打开App所有的Fragment都会初始化并且去网络请求数据,这就会造成每次打开时加载很慢体验极差,而且用户又不一定每一个页面都会点击去查看,用数据流量的话还会造成流量的浪费,这时我们就需要用到Fragment的延迟加载机制了,这样...

2020-01-10 17:37:32 454

原创 Android自定义可跟随手指拖动的全局悬浮窗

一丶首先是自定义一个跟随手指滑动的View,目前只支持简单的悬浮拖动,可在此基础上进行功能扩展,比如直播类APP的悬浮播放窗也是这个原理,挺简单的,不多说了,直接上代码,import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.B...

2019-12-28 23:04:02 1730

原创 Android 5.0以上系统设置沉浸式状态栏

首先App的theme得是NoActionBar,然后在Activity 的onCreate方法中的setContentView方法前加上以下代码:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags( WindowManage...

2019-06-19 17:11:34 799

原创 Android 开启一个透明的Activity

一丶首先获取Activity的Window对象,将Activity所属的Window设置为一个像素大小// 设置透明沉浸状态栏if (Build.VERSION.SDK_INT>=21) { View decorView = getWindow().getDecorView(); decorView.setSystemU...

2019-06-18 16:47:13 4362

原创 RXjava2总结

1、RxJava 基本1.1 RxJava 简介RxJava是一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序的库。虽然,在Android中,我们可以使用AsyncTask来完成异步任务操作,但是当任务的梳理比较多的时候,我们要为每个任务定义一个AsyncTask就变得非常繁琐。RxJava能帮助我们在实现异步执行的前提下保持代码的清晰。它的原理就是创建一个Obs...

2019-06-15 12:54:41 597

转载 Git合并多次提交记录

一、首先在终端输入查看git log命令查看提交的历史记录,默认只显示两条提交纪录,可按回车键显示多条纪录.二、然后复制合并前的一次提交记录的前9位hash值2565ds565,在终端输入:git rebase -i 2565ds565 进行合并三、然后就会进入历史提交的编辑页面pick acf6d24 第二次提交pick 0353373 第三次提交# Rebase 2169...

2019-06-10 19:10:35 5939

原创 RxJava+Retrofit网络请求框架封装实现MVVM模式

RxJava的作用主要就是负责线程调度,所以就可以把Retrofit封装为一个工具类;主要代码如下:import android.support.annotation.NonNull;import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import java.util.concurrent...

2019-06-02 18:45:48 734

原创 Android AIDL跨进程通信步骤

一. 首先在服务端创建一个和java文件夹同级的aidl文件夹,然后在aidl文件夹里面新建AIDL接口,在接口里面定义我们要暴露给客户端调用的方法,AIDL接口中的数据类型只能是八大基本数据类型丶String和CharSequence丶List和Map(里面的元素都必须能够被AIDL支持)丶实现了Parcelable接口的对象以及AIDL接口本身.AIDL接口的示例代码如下:// IMyA...

2019-06-02 11:21:00 133

原创 Retrofit上传Json数据

首先将要上传的数据转换成为Json数据,可以用Gson直接转换或者用JSONObject类,将HashMap数据转换为Json,这里使用后面一种方式来实现,代码如下:// 将数据封装为map类型val params = HashMap<String, String>() params["message"] = feedbackContent ...

2019-05-30 09:49:14 1985

原创 Android自定义Dialog弹窗

核心思想就是通过Dialog的构造函数来创建Dialog,然后给Dialog设置自定义布局fun showAlertDialog(context: Context, title: String, message: CharSequence, positive: String, negative: String, cmListener: ConfirmListener?, clListener...

2019-05-29 14:41:47 686

原创 Android运行时权限EasyPermissions库的使用

第一步:在gradle中导入EasyPermissions库依赖implementation 'pub.devrel:easypermissions:1.1.3'第二步 :Activity或者Fragment实现EasyPermissions.PermissionCallbacks接口,并重写接口里的两个方法,如下://授权成功后回调override fun onPermissi...

2019-05-13 15:41:13 325

原创 同时监听单击、双击、长按、上下左右滑动手势的自定义view

本人大四菜鸟一枚,这是本人的第一篇博客,也相当于做个笔记吧,各位大佬见笑了。。。自学安卓也有一段时间了,都没真正写过技术博客,今天一时兴起,就想写一个能够同时监听各种手势操作的自定义view。主要就是实现了可以同时响应单击、双击、长按、上下左右滑动的监听,且事件互不干扰,有且只有一个事件触发,解决了一个view需要多种手势监听的需求。废话不多说,直接上代码,关键代码注释都写有,看注...

2018-11-03 01:46:48 792 3

空空如也

空空如也

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

TA关注的人

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