自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 android无线调试连接

开发时,遇到一些设备无法通过USB线连接adb时,可以尝试使用wifi无线调试。来配对(此时的ip:port是图二弹窗中显示的),成功后再使用。连接(此时的ip:port是图一显示的),即可成功。再到开发者选项中打开无线调试,并进入子页面。点击使用配对码配对设备,会弹出如下对话框。首先,要确保手机和电脑在同一个局域网内。图一 无线调试设置界面。图二 配对信息对话框。

2023-12-18 09:46:46 510

原创 fragment常用知识点

在上面的场景中,如果name传2,flag传0,那么会找到BackStackEntry{d274363 #2 2}对象,flag为0表示将当前这个BackStackEntry对象保留在回退栈中,那么此时,只会将fragment3出栈,界面显示fragment2.有了对commit的理解就很好理解commitAllowingStateLoss方法了,该方法允许丢失Fragment状态,故也没有强制必须要在activity保存状态前提交,相当于提交的时机没有那么多的限制。方法时,该事务会立即执行。

2023-12-11 11:13:27 837

原创 android aidl及binder基础知识总结

binder是android framework提供的,用于跨进程方法调用的机制,具有安全高效等特点。我们知道,在 Android 系统中,每个应用程序都运行在一个独立的进程中,各个进程之间需要进行数据交换和调用,以实现各种功能。为了实现这个目的,binder应运而生。1、一个类要想序列化就要实现Serializable或Parcelable接口,同理一个类要想提供跨进程服务,就必须继承binder类。binder就像一个标记类一样,只要继承了,就有资格在进程间通信了。

2023-05-25 14:14:29 975

原创 浮点数基础知识

以32位浮点数为例,8为指数可以表示的范围为0到255,但是为了表示负数,需要将其中的一半划归负数。可以看到,在二进制中连续的三个小数,0.01,0.10,0.11转化成对应的十进制数后并不是连续的,中间差了很多。当位数不断扩大时,也只能表示更多的十进制浮点数,但也还是无法精确的表示对应的十进制浮点数。最终得到的23位即为对应的浮点数的尾数部分。因为一个计算机的“常识”,即浮点数的表示不是精确的,而是近似的。故二进制表示的浮点数无法精确的转化成对应的十进制数,这是浮点数无法精确计算的根本原因。...

2022-08-02 12:57:12 769

原创 关于计算机中补码的理解

之前写过一篇文章,总结计算机中全加器的原理,使用全加器可以方便的对两数进行相加运算。但是如何处理减法呢?这里就要使用补码了。那何为补码呢,之前学习的时候一直没有仔细思考,这个补字的含义。其实这里的补就是另一种状态的对立。想象一下如果一面墙破了一个洞,我们要把它补起来。那么这里的补,其实就是破了洞的墙和缺块的地方共同组成了一面完成的墙。在日常生活中,我们使用十进制的减法时,常常遇到要借位进行相减的时侯,如253减去176。此时个位和百位上的数字不够减,就需要借位了。有时为了快速的计算,我们常常会这样处理,即2

2022-06-23 08:54:15 502

原创 8位全加器原理

8位全加器原理

2022-06-21 09:38:40 5246

原创 策略设计模式

策略模式定义定义一组算法,将每个算法都封装起来,并且在使用时使它们之间可以自由互换。通用类图分析从策略模式的类图来看,主要有以下三个角色:Context,也即策略的持有者。在开发过程有时也没有这个角色,但是通过该角色持有策略,可以使业务逻辑与具体的策略解耦,使代码架构更加灵活。IStrategy,策略接口,所有的策略都需要实现该接口,方便在不同策略之间切换。ConcreteStrategyA、ConcreteStrategyB等,是具体的策略提供者,实现了具体的算法或业务逻辑。从类图

2022-05-26 09:10:58 86

原创 适配器设计模式

适配器模式概念适配器模式的定义如下:将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作。结合生活的中的例子,我们就能深刻的理解适配器模式了。 比如,在生活中,我有一个3.5mm接口的耳机,但是现在主流手机都不支持3.5mm的接口,而是通过type-c接口支持。 此时,原来3.5mm接口的耳机就无法在该手机上使用了,但是我们可以购买一个转接器,将3.5mm接口转成type-c的接口,这样就可以使用3.5mm的耳机了。在生活中,这样的现象很多,如

2022-05-25 09:17:57 86

原创 单例设计模式

单例模式基本概念单例模式,顾名思义是指只有一个实例的对象。我们知道在java中对象是通过new出来的,每new一次就会产生一个新的对象,那么如何限制只产生一个对象呢?每个对象都有构造函数,每当new对象时都会调用对象的构造函数来生成对象。 此时我们可以将构造函数设置成private来限制外部的访问,同时在类内部new一个并返回给外部使用。单例模式参考代码如下:public class Singleton { // 在内部先new一个出来 public static final Singlet

2022-05-24 09:24:41 86

原创 工厂设计模式

工厂设计模式场景示例比如现在需要对手机目录下的文档进行读写,考虑到不同的文档类型有不同的操作,于是抽象一个Document接口来抽象文档的读写过程,不同的文档实现这个Document接口,完成具体的读写过程。Document接口定义如下:public Interface Document { void read(); void save(); void edit(); String path();}具体的文档类型定义示例如下:// excel文档public class Ex

2022-05-23 14:45:01 162

原创 mitmproxy代理工具使用

mitmproxy 是一款免费、开放的基于Python 开发的交互式HTTPS代理工具。也即可以用python对请求和响应进行修改操作。1、如何安装?mitmproxy的安装方式有两种通过pip安装,如下:pip install mitmproxy在官网下载安装包进行安装。如何安装证书?有以下两种方式,直接安装或通过浏览器安装。进入C:\Users\用户.mitmproxy目录,该目录下有一系列的证书。 windows安装mitmproxy-ca-cert.p12,手机安装mitm

2022-05-20 09:28:49 2380 3

原创 charles代理工具使用

使用charles代理注释事项手机抓包保证手机和电脑在同一个局域网。设置代理信息,ip为电脑的ip地址,可以通过菜单栏中【help】-【Local ip address】查看,端口号charles默认是8888。抓取https包时,在手机上需要安装charles证书。在【help】-【ssl proxy】可以查看在手机上如何安装证书。代理完成后,及时清除代理信息,避免代理导致出现其他问题。windows抓包勾选菜单栏【proxy】下的【window proxy】选项检查系统

2022-05-20 08:29:07 761

原创 在as中使用正则替换

之前记得在某个视频中老师使用了正则替换,感觉效率惊人。 今天突然想到了,并且实际使用了,在此记录一下操作。在android studio中(jetbrains全家桶应该都支持),使用快捷键或菜单项调出替换操作框,如下图:如上的操作是给单个数字替换成对应的数字字符串。这里有几点需要注意的,一是需要点击红色框中标记的启用正则匹配的开关,二是替换的字符串要使用源字符串中的内容,需要用()来分组,如果有多组,使用$1,$2,$3等来区分。 三是注意正则是否正确,并谨慎使用repleace all。...

2022-05-19 11:45:53 416

原创 TextView使用textApperance属性设置字体颜色失效

textview通过textApperance属性设置字体颜色不生效问题。

2022-04-30 14:15:23 1415

原创 android构建工具gradle基础知识

gradle概述gradle是一个开源的通用构建工具,可以构建几乎任意类型的产物。针对不同的场景,gradle使用不同的插件和DSL申明配置来共同完成构建。gradle有如下几个特点:高性能基于jvm,故需要java环境基于协议,即build.gradle中的配置申明等。可扩展,如自定义task及action,自定义插件等。可视化,构建的阶段及task等都可追溯,查看耗时及执行情况等。IDE支持,大部分的IDE都支持gradlegradle的安装gradle是基于groovy语言,而

2022-04-30 13:49:44 2501

原创 gradle插件上传到jitpack

最近想将工作中常用的task封装一下,以gradle插件的形式供他人使用,于是就在网络上搜索如何上传。很多博客都是讲解如何上传到jCenter,但是找来找去都没有找到注册的地方。 后来在android官网上显示jcenter已经不提供存储服务了。后来搜索到了jitpack,这个比较方便,它可以拉取github(其他的有几个平台也支持,不过我没有尝试)代码并构建产物,然后生成相关的依赖语句。下面总结记录一下步骤1、需要有github账号及对应的仓库2、在github上标记对应的release或tag

2022-03-15 09:23:10 622

原创 Python基础知识

1、概述1、python中变量可直接使用,无须申明。2、单行代码结束时可省略分号。 如果将多行代码写在一行,则需要分号分隔。2、模块的导入语句在 python 用 import 或者 from…import 来导入相应的模块。将整个模块(somemodule)导入,格式为: import somemoduleimport sysfor i in sys.argv: print(i)从某个模块中导入某个函数,格式为: from somemodule import somefunct

2022-02-17 09:17:21 488

原创 android studio的提交对话框切换

有一次将侧边提交窗口通过切换菜单切换成了对话框的形式了,但是不知道怎么切换回去。后来通过双击shift,输入 【use non-modal commit dialog 】来搜索相关action,可以切换回来。应该还有其他的入口,一时找不到了。...

2022-02-08 19:49:18 1403

原创 scroller基础知识点

1、scroller概念scroller是对滑动操作的一种封装。它记录滑动过程中view应有的偏移量,但不主动作用于view。需要额外的操作将这些偏移量设置给view,从而产生滑动现象。2、scroller的使用3、scroller结合touch event事件4、demo演示5、注意事项5.1、scoller移动方向与符号的问题参考https://blog.csdn.net/yanbober/article/details/50419117...

2022-01-13 12:03:59 2556

原创 SQL常用语句

在navicat中执行多条insert数据时,需要分号结尾。mysql通过分号判断sql语句是否结束。如果要在android中写sql可以先在navicat中创建,再复制粘贴即可。1、根据日期查询SELECT * FROM site WHERE create_time > ‘2018-09-18 08:59:11’ AND create_time < ‘2019-03-18’具体的日期还可以加上时间,其中create_time是datetime类型的字段。2、查询null 或者 非空

2021-11-10 10:16:34 132

原创 pip3命令基础用法

在终端直接输入pip命令(有多个版本的可能是pip3)可以打印其用法。其中常用的有pip3 show 显示一个已安装模块的详细信息,其中包含了这个模块的依赖信息。(这个在安装包时比较有用)pip3 install 安装模块。 这个比较常用,也比较方便,只要添加相关的模块名称就可以下载安装。如果是离线安装,某些包可能需要依赖。 此时可以先用–no-deps选项先忽略依赖,后面再安装。 (此时可以通过pip show命令查看依赖包,再下载安装)pip3 uninstall 卸载相关模块。 一般卸载的

2021-11-02 09:02:14 1544

原创 apktool使用注意事项

1、apktool的下载及安装apktool是一个反编译apk文件的工具,可以在其官网查看介绍及下载。现在下载下来的是一个jar包,需要在命令行中执行java -jar 指定apktool的jar包来运行。但是经常用这个命令的情况下,不是很方便。故网上有博客(忘了是哪里看的了,感谢原作者)使用bat脚本包装了一下调用命令,代码如下:@echo offset PATH=%CD%;%PATH%;java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8

2021-10-26 10:59:35 1398

原创 git常用命令

git常用命令git checkout xxx 切换到xxx分支上,如果该分支不存在,会报错。git checkout -b xxx 创建新的分支并切换到xxx分支上。git checkout -b xxx 提交号, 在提交号处的节点创建新的分支并指向这个节点。git checkout 提交号。将当前分支切换到指定记录。git checkout HEAD^ 将当前分支切换到上一次...

2021-08-10 09:34:50 1181

原创 android事件分发基础知识点

1.单个view捕获触摸事件除了通过覆写onTouchEvent()方法外,还可以通过setOnTouchListener()方法设置OnTouchListener监听器来监听相关的事件。注意:如果设置的onTouchListener中 ACTION_DOWN 返回了false,那么后续就接收不到 ACTION_MOVE 和 ACTION_UP事件。2.使用GestureDetectorCompat检测所有支持的手势代码示例public class MainActivity extends Act

2021-08-01 14:09:41 93

原创 关于seekbar的thumb被截取的问题

最近在项目中使用了别人些的seekbar,发现seekbar的thumb的左右均被截取了一部分,非常不美观。在网络上查了一下资料,大部分是将android:thumbOffset设置为0,基本可以得到正确的结果。但是如果同时设置了padding的话,那么可能还是会有截取或者不对齐的问题。 于是学习了一下源码,做点笔记。首先搞清楚了thumbOffset的作用是啥?通过源码的drawThumb方法可以看出,mThumbOffset可以让thumb绘制在padding范围外。 通过这里也可以看出,将th

2021-07-31 13:08:09 1079

原创 关于android事件分发中mFirstTouchTarget的理解

今天在做跟随手指移动view的demo时发现,view会有剧烈的抖动。

2021-07-28 15:25:06 944 2

原创 Android OpenGL ES 学习(一)

package com.kingsoft.openglproject.util;import android.opengl.GLES20;import android.util.Log;public class ShaderHelper { public static final String TAG = "ShaderHelper"; private static int compileShader(int type, String shaderCode) {

2021-06-30 20:20:45 443 2

原创 android 双击事件分析及三击事件识别

在android中,经常需要使用双击来响应一些操作,此时就可以使用系统提供的GestureDetector类来实现。在GestureDetector类中,定义了OnGestureListener 和 OnDoubleTapListener 两个接口,可以根据需要分别实现不同的接口。其中 OnGestureListener 对象的注入是通过构造方法的方式,而 OnDoubleTapListener 对象的注入是通过set方法设置的,见如下图片。(android也提供了一个实现这两个接口的类来简化

2021-06-09 20:38:27 1590

原创 常见排序算法

这些基础的算法真是容易忘,一段时间不写细节就不会处理了。1、初级的桶排序如需要对10以内的数进行排序,可以先初始化一个长度为10的数组。然后遍历,遍历到哪个数就将数组对应的下标加1,如遍历到3,则a[3]++。整个遍历结束后,再通过输出数组即可得到有序数据。需要注意的是,a[i]是多少则需要打印多少次。这种算法相当于是用下标记录数据,用值记录次数。该算法的优点是快速,其时间复杂度是O(n)。但是该算法的缺点是占用过多的空间,如果需要对10000个数排序,那么需要申请长度10000数组来存储,相当于用

2021-04-12 19:52:19 361

原创 关于Bitmap采样的问题

最近在使用bitmap采样时发现,采样后的大小比采样前还要大。 这是怎么回事呢? 原来是我忽略了一个相关知识点。代码如下:BitmapFactory.Options options = new BitmapFactory.Options();// 设置仅解码宽高。 在options中有in开头的属性,一般是用来设置的。 带out开头的属性一般是输出相关信息的。 options.inJustDecodeBounds = true;// 设置后,这次decode会返回null,所以不要使用此时返回的b

2021-03-16 11:14:30 328

原创 android自定义animation

1、什么是自定义animation在android中,系统提供了一些可以直接使用的animation,如TranslateAniamtion、ScaleAnimation、AlphaAnimation及RotateAnimation。这四种动画对应着平移、缩放、渐变及旋转动画。 在开发中,我们只需要定义好animtion对象,便可以在view上调用startAnimation来实现view的动画。但如果有些动画,不能用这些动画实现该怎么办呢? 如一些曲线类型的动画。那么,我们可以通过自定义的anima

2021-03-13 14:54:29 509

原创 android 自定义view仿支付宝写五褔及播放

本文记录一下实现仿支付宝写五褔及回放的过程。先看效果如下,没有找到相关的背景图,只能以田字格当作背景。整个过程分为两部分,一部分是写字,一部份是回放。 该过程主要使用了path和pathmeasure类,在网上有很多写的非常好博文可以参考。自定义view的源码见文末链接,此处只摘取部分代码记录,以便后续参考和温故。首先,实现写的过程。@Overridepublic boolean onTouchEvent(MotionEvent event) { int action = event.

2021-03-06 15:21:55 491

原创 android 自定义view仿支付宝支付结果动画

本文记录一下仿支付宝支付结果动画过程。效果如下:首先,实现一个首尾互相追赶,忽长忽短的动画过程。 (与google的等待动画相似)这里通过canvas的drawArc方式实现, 该方法签名如下:public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint) { super.drawArc(oval, st

2021-03-04 23:30:22 355 1

原创 android 自定义view实现刮刮卡效果

本文记录一下自定义View实现刮刮卡效果的过程。刮刮卡的实现主要是通过图像的混合来实现,但是在实现时有诸多细节需要注意。 通过分析生活中的刮刮卡效果,可以大概知道,灰色的蒙层是一层图像,而手势摸过的地方又是一层图像。 通过合适的混合模式就可以实现刮刮卡的效果。我们知道手势可以通过path绘制到canvas上,那么如何将手势绘制的图像输出到一张图像上呢?可以通过传入空的Bitmap到Canvas的构造函数中,然后将手势轨迹画到这个canvas上,那么该bitmap上就会有相关的轨迹了。具体代码如下:

2021-03-01 14:57:24 270 2

原创 关于http请求头Content-Type的基本知识

1、背景最近在使用一个okhttp网络框架时,在拦截器中打印post数据发现数据均经过了编码,打印出来的是类似如下的字符loginName%22%3A%22hello1124%22%2C%22mac%22%3A%2294%3Abe%3A46%3A15%3A15%3A20%22%2C%22pId%22%3A%225602923243413443840%22%2C%22对比原数据发现,只有其中部分数据被编码过了。 为什么会这样?2、Content-Type与数据编码后来查看其源码发现有如下代码:r

2021-02-23 20:07:09 2052

原创 合并区间

Leetcode56 题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。解法代码如下:def merge(self, intervals: List[List[int]]) -> List[List[int]]: def takeFirst(x): return x[0] intervals.sort(key=

2021-02-20 21:16:47 100

原创 队列的使用场景之一

在android中经常有在多少秒内点击某个按钮多少下的需求,之前在网上的博客找到的解决方法如下:// 定义hit的长度,需要点击多少下就申明多长的数组,用于记录每次点击的时间戳。mHits = new long[5];System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); //把从第二位至最后一位之间的数字复制到第一位至倒数第一位,相当于不断丢弃第一位上的数字。 mHits[mHits.length - 1] = SystemCloc

2021-02-20 15:44:37 142 2

原创 使用itemdecoration实现时间线效果

代码如下:// 时间线装饰器public class TimeLineDecoration extends RecyclerView.ItemDecoration { private Paint mPaint; public TimeLineDecoration() { mPaint = new Paint(); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.BLUE);

2021-02-20 09:36:43 223 2

原创 ItemDecoration用法

1、ItemDecoration概念在使用RecyclerView显示列表的时候需要分隔线隔开item,此时则可以使用Recycler的内部类ItemDecoration。ItemDecoration是android系统提供的基类,用于绘制RecyclerView的分隔线,我们可以通过继承ItemDecoration实现丰富的分隔线效果。(系统也提供了实现好的DividerItemDecoration使用。)2、ItemDecoration的使用使用ItemDecoration时,需继承此类并覆写其中

2021-02-19 11:09:13 4235 12

原创 将json字符串转化为hashmap的问题

最近在开发时遇到一个问题, 简化如下:String v = "{\"hello\":1,\"world\":\"2\"}";Map<String, String> mapCur = JSONObject.parseObject(v, HashMap.class);System.out.println("map size : " + mapCur.size());StringBuffer sb = new StringBuffer();sb.append(mapCur.get("hell

2021-02-19 10:02:46 3042

WuFuView.java

简单的自定义view实现写褔字及回放过程。

2021-03-06

AlipayStateView.java

android自定义view仿支付宝支付结果动画

2021-03-04

Android gradle打包手册

Android gradle打包手册

2017-02-27

View事件处理总结

通过代码实践总结dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent的调用流程、顺序、及返回值对事件处理的影响。

2015-01-31

Activity基础知识总结

文档通过代码实践总结了Activity的生命周期方法,Launcher Mode启动方式,Intent Filter的匹配规则。同时文档中用截图记录关键的Log信息。文件中也包含了代码可以方便的学习和理解Activity。

2015-01-31

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

TA关注的人

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