自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (31)
  • 收藏
  • 关注

原创 kotlin 提前退出方法函数(提前退出代码块)

方法函数

2022-10-23 14:02:36 1003 1

原创 EditText宽度不要受hint宽度控制

EditText宽度不要受hint宽度控制

2022-09-24 15:13:42 293

原创 android开发获取内存、Native内存和虚拟内存的方式

【代码】android开发获取内存、Native内存和虚拟内存的方式。

2022-08-27 10:49:40 1310

原创 Android 4.4系统版本使用ListView造成cannot be cast to android.widget.AbsListView$LayoutParams的问题

在过兼容测试的时候,有个需求向下兼容到4.4版本,结果遇到闪退问题:java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams查看异常栈的调用:at android.widget.ListView.setupChild(ListView.java:1826) at android.widge

2022-03-03 09:42:37 1911

原创 Charles的简单用法(Mock本地文件)

概要Charles作为一款好用的抓包工具,在移动开发时调试接口返回数据时可以非常方便的帮助开发者mock数据,快速的对响应结果进行修改、添加以调试数据在手机界面上的映射。文末附下载链接使用这里我选择通过本地mock数据来演示,因为在我日常的开发中这种模式最常用。(手机和电脑应处于同一网络环境下)下载软件后界面样式:1、首先选择控制栏中的Help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote B

2021-12-22 10:00:37 1011

原创 5种子线程更新UI的方式

前言众所周知,Android中在UI线程(主线程)才能更新UI(比如操作控件等等),在子线程中更新UI是不被允许的,会直接抛出异常:根据调用链能很快定位到报错所在:这里会把mThread和当前调用它的线程做比较,不一致则直接抛出异常!但是这个判断是可以通过某些“小手段”绕过去的,接下来就说说4种子线程更新UI的方法1、onCreate中调用修改UI override fun onCreate(savedInstanceState: Bundle?) { super.onCrea

2021-12-14 10:50:49 5013

原创 绘制多行文本之中插入图片

概要在绘制多行文本的时候,经常会有多行图片中间插入一张图片的需求。此时文字应该做到在图片之外的空白区域完成绘制,如图:

2021-11-22 10:37:27 1643

原创 android开发 如何判断验证码安全保护是否关闭

目前在某为,小蓝小绿手机上存在验证码安全保护的功能,该功能开启时可能会导致应用自动读取验证码内容的失败,具体页面如下:该页面无法通过Intent跳转,(某为是这样,小蓝小绿没试过估计也是),通过AndroidManifest.xml分析发现此Activity设置的permission,而此权限是signatureOrSystem级别,因此普通APP无法在AndroidManifest.xml声明。APP在开发的时候只能提醒用户手机关闭它。那怎么判断它是否开启?这个开关其实在系统中对应的是一个属性,所以

2020-12-07 21:05:39 2186

原创 将文本中的带超链接的a标签的文本进行解析并设置跳转

将文本中的带超链接的a标签的文本进行解析并设置跳转,如:public static void addHyperLinkForText(TextView textView, String text, final Context context) { if(TextUtils.isEmpty(text)) { textView.setText(""); } Pattern pattern = Pattern.compile("(<a.*?</a>)")

2020-11-07 10:22:21 476

原创 RxJava zip操作符源码分析

zip操作符允许接受多个ObservableSource发射的数据,并能够将他们重新组合并重新发射的一种操作符。常见的使用方式:首先传入若干个ObservableSource,然后每个ObservableSource都能通过observer.onNext来发射数据,最终在Function接口实现方法中可以获取到这些数据,并做一个重新整合或其他操作,然后返回。比如这里我将获取的值相加然后返回,最终在Observer.onNext中能获取到值123:源码分析看看zip的实现:将传入的Functi

2020-08-27 19:00:33 446

原创 RxJava线程变换subscribeOn和observeOn源码分析

先看用法:在一个子线程中创建一个Observable发射,Observer接受数据的全过程,执行看看Log信息:可以看到onSuscribe,subscribe,onNext执行分别在不同的线程源码分析首先这样的链式写法非常简洁,但是对代码分析增加困难,所在以上代码可以转换成这样:可以看到转换成比较直观的代码调用;分别查看subscribeOn和observeOn:所以subThreadObservable即为一个ObservableSubscribeOn对象,mainThread

2020-08-27 13:37:11 430

原创 RxJava create和flatMap的源码分析

首先看看RxJava最基本的用法:create:创建一个Observable对象,然后subscribe一个Observer对象,翻译过来就是一个被观察者对象订阅了一个观察者对象(其实应该反过来比较符合逻辑,但是这样才更符合链式调用)代码看起来似乎无从下手,可以将它转换成这样:设置转成这样:这样好分析多了。。。通过Observable的create方法生成一个Observable对象,然后调用这个对象的subscribe方法并传入一个ObservableOnSubscribe对象。先从O

2020-08-26 14:57:31 171

原创 TabLayout设置Tab下的指示器与文字长度相同

TabLayout默认的Tab的下的指示器是充满整个Tab的:如果想达到指示器长度和文字长度一样长的效果,使用API:mTabLayout.setTabIndicatorFullWidth(false);或者在xml布局文件中的TabLayout标签设置:app:tabIndicatorFullWidth=“false”setTabIndicatorFullWidth默认为true效果如图:...

2020-06-17 21:54:03 1821

原创 Android换肤:从外存中读取皮肤包资源实现换肤

简介经过上篇的介绍,其实换肤的操作十分简单,简单的说就是A模式调用A资源文件,B模式调用B资源文件,C模式调用C资源文件,以此类推而已。这个资源文件,其实就是皮肤包,直接开撸资源文件包(皮肤包)首先是资源文件包,它是资源文件,所以它仅仅有一些资源而已,没有代码。这些资源可以自定义。(但是资源名字要与主项目的资源名字一致)然后build成apk文件后,就可以改成喜欢的名字,比如xx.skin,然后放入内置存储卡中:storage/emlated/0/demo地址:https://github.c

2020-05-31 20:31:00 662

原创 Android 白天黑夜模式切换换肤

简介Android换肤操作,我的理解就是高级的setTextColor、setBackground等操作,设置可以通过getWindow().getDecorView()获取xml布局中所有的View然后一个个判断、设置。但是这样做的效率十分低下。我们知道android的一个个View都是通过LayoutInflater渲染出来的,那能不能在一开始的时候就给View设置监听,让他们在activity加载后能随着操作的改变而改变呢?这是可以的!一首先从源码onCreate进入,康康View怎么被从xml

2020-05-26 19:52:59 1569

原创 A factory has already been set on this LayoutInflater

在重写Factory2的并给LayoutInflater设置的时候会遇到这个这个问题,通过源码可以发现问题所在:可以发现当LayoutInflater中,当mFactorySet的值为true时会出现这个异常,因此只要把mFactorySet设置为false就不会有异常了,而mFactorySet又是private类型,只能通过反射来设置了:设置好后运行,还是报相同的错:A factory has already been set on this LayoutInflater把鼠标放到getD

2020-05-24 12:49:49 1395

原创 dataBinding实现和原理分析

dataBinding是Google退出的数据绑定支持库,使用该库可以直接实现数据Model和页面的双向绑定。实现方法1、在app下的build.gradle的android{…}中添加: dataBinding { enabled = true }2、新建bean对象:在layout的xml文件中添加数据源:...

2020-04-22 16:06:59 756

原创 使用AspectJ完成AOP切面

面向切面的程序设计:通过横切关注点与业务主体进行一步分离,以提高程序代码的模块程度。举例来说,比如超级会员、会员、普通用户登录一个系统,那么他们都要使用到登录业务,这时就可以利用横向切面将整个业务分割出来,并植入一些代码,达到统一管理的效果。在Android开发中,可以使用AspectJ框架来实现。ASpectJ有2个重要的概念:PointCut(切入点)、JointPoint(连接点)切入点...

2020-04-16 10:15:48 375

原创 利用bsdiff完成app的增量更新

当手机app应用需要更新时,如果需要重新下载一个完成的应用apk文件,十分消耗流量。这时候就可以使用增量更新技术。增量更新可以使用bsdiff工具来完成,简单的说就是通过工具将旧的apk和新的apk进行比较,然后生成一个差异包,这个差异包的体积大小会远远地小于整个完整apk的大小。然后用户通过网络请求只需要下载这个差异包就可以完成应用的升级。首先通过网络下载bsdiff工具下载链接下载完...

2020-03-24 00:01:27 386

原创 Android Studio 3.5.3配置ffmpeg的2种方法

首先要有ffmpeg编译后的文件,这个网上很多,如果懒得编译,直接从我后面的demo中的lib文件夹里去拿就行了。第一种新建一个ndk项目:打开后的目录结构是这样的:然后将armeabi-v7a文件夹复制到libs下,armeabi-v7a文件下有.a文件:然后在app的build.gradle文件设置成这样:把include文件夹(demo里有)复制到cpp文件夹下,里面包含...

2020-03-19 22:43:34 456 4

原创 使用gif lib库高效加载Gif图

1、如果没有配置NDK路径的话,会出现:Caused by: org.gradle.api.InvalidUserDataException: NDK not configured. Download it with SDK manager. 。。。的错误,这时如果想暂时通过,直接在local.properties里添加NDK路径:这里要替换成自己的路径然后把minSdkVersion改...

2020-03-18 21:33:41 1380

原创 android sepolicy安全策略问题解决

在Android Framework开发中经常碰到sepolicy相关问题,它是应用程序缺少对某一“类”(可能是文件、文件夹等)的某种权限(可能是缺少读、写或等等其他权限),其实这类问题并不难,举2个例子来说明例子1scontext:platform_apptcontext:fps_data_filetclass:filepermission:read简单的说就是进程为platform...

2020-02-26 15:21:16 2024

原创 shell文件打包该文件夹中所有sh结尾的文件

$PWD:shell中自带的变量,表示当前路径

2020-02-23 00:13:49 1004

原创 录音识曲水波纹动画&加载时等待圈

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2019-12-22 16:44:52 743

原创 淘宝页面RecyclerView分析及阿里Vlayout框架使用与分析

淘宝APP基本上是我们每部手机上必备的APP了,进入它的主页,就可以发现一个十分复杂(貌似)的页面。可以发现布局似乎十分复杂,使用xx工具看看它的布局情况,主界面居然只有一个RecyclerView就能实现??原来淘宝使用了阿里团队开发的一个开源框架Vlayout,(全称VirtualLayou)implementation 'com.alibaba.android:vlayout:1.0....

2019-12-02 23:22:51 892

原创 SVG图片绘制成不规则控件(中国省份为例)

activity_main:<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://s...

2019-11-23 13:31:11 464

原创 Android 手动实现RecyclerView

在Android开发中,RecyclerView是一个非常重要且经常用到的框架,它的功能十分强大,且性能很好。为了弄懂RecyclerView是怎么实现的,直接阅读源码是一个不错的选择,但是源码实在是繁琐,为了附加功能代码会干扰对基本原理代码的理解,很容易放弃,甚至得花上几天去搞懂它,实在没必要。本章通过简单的不能再简单的语句与图片搞懂RecyclerView最最基本的原理。首先搞懂这个英文名什...

2019-11-12 16:40:27 446

原创 Android平行动画(首次进入app显示)

在我们打开一个新的app时,几乎每个app都会有一个初始化动画显示,这个动画只显示一次,第二次打开就不会显示了,通常来说这个动画都在尽可能地向用户介绍这个app,也可以最大化的展示app的特点,亮点。比如这样:它被称为平行动画,它的实现很简单,只是一个简单的ViewPager和一个ImageView控件而已。<RelativeLayout xmlns:android="http...

2019-10-07 22:31:05 527 2

原创 Android 自定义简易属性动画

Android中封装了许多的动画效果,其中较常用的属性动画,写法如:ObjectAnimator.ofArgb(。。。)ObjectAnimator.ofInt(。。。)ObjectAnimator.ofFloat(。。。)其实都是通过不停的设置View类中的各种属性来实现的。如:setScaleX、setScaleY、setAlpha等。(可以自行去查看View的源码)。我们知道,如果图...

2019-10-06 22:48:46 135

原创 qq气泡实现

使用贝塞尔曲线绘制qq气泡,整个动画过程可分为4个过程:1、默认状态:此时显示一个气泡和一个消息框。2、连接状态:一个固定气泡(大小随着拖拽的长度变化而变化),一个移动气泡和它之上的消息框。3、分离状态,此时固定气泡消失,只有移动气泡(和它的消息框)随手指的移动而移动。4、消失状态:放开手指后气泡爆炸消失。将整个过程分割为这几个步骤,再分别实现每个步骤,整个过程就完成了!首先...

2019-09-30 00:35:03 845

原创 贝塞尔曲线(Bezier Curve)代码实现

实现贝塞尔曲线第一步弄清楚什么是贝塞尔曲线:在Android开发中,我们经常会碰到贝塞尔曲线的使用,如许多不规则图像的绘制。Android中的Path类提供了二阶贝塞尔曲线和三阶贝塞尔曲线的函数实现。分别是Path.quadTo()和Path.cubicTo(),通常来说这也足够了,但是如果需要4阶,5阶甚至更高阶的贝塞尔曲线,就不得不自己实现了。自实现贝塞尔曲线实际上非常简单。首先明白贝...

2019-09-29 11:51:51 3265

原创 Android实现旋转、扩散、水波纹效果动画

先上图可以将这种效果分为3个动画:1、旋转,2、扩散,3、水波纹效果1、旋转首先先确定角度,6个小球占满360°,因此每个小球之间相隔60°。将2π作为圆的一圈,那么可以确定相隔的角度为:float angle = (float) (Math.PI * 2 / mCircleColors.length);由勾股定理可知:x = r * cos(angle)y = r * sin(a...

2019-07-27 22:53:36 3112

原创 Android 不规则控件绘制(Google Chrome图标)

手写谷歌浏览器图标不规则图形绘制谷歌浏览器的图标是一个不规则图形,今天来手动实现它1、首先自定义View,然后定义各种需要的参数:private int[] colors = new int[] {0xFFD21D22,0xFFFBD109,0xFF4BB748,0xFF398ED5,Color.WHITE}; //定义google的颜色private int cx;...

2019-07-08 16:24:36 644

原创 揭秘lOC注入框架

揭秘lOC注入框架项目需求:注入框架实现一、控件注入1、添加注释2、对注释的参数进行赋值一、事件注入1、添加事件总注解项目需求:在Android开发中,我们在初始化控件、事件时常常被繁琐的代码困扰,比如这样:Button button;TextView textView;@Overrideprotected void onCreate(@Nullable Bundle savedIn...

2019-07-07 00:54:36 507

原创 Anroid 组件化原理及实现

在Android大型项目开发中,一个项目往往是由多人分工合作而成,每个程序员负责不同的模块,每个人的开发都是一个可独立运行的apk项目文件,开发完成后将所有人的项目合并而成。传统的项目架构中,往往如图所示:这样的项目结构不是很好,因为某个重要模块删除或修改时,会影响到其他模块的使用甚至引起连锁错误,耦合度很高。组件化的出现解决了类似的问题。组件化采用了如下的项目结构:通过Android ...

2019-06-27 15:06:19 595

原创 android 粒子爆炸特效

先上图:这是一个高级UI特效,是个动画。完成这个动画只要3步:1、控件完成振动效果动画。2、控件振动动画完成后消失,然后将控件转换成Bitmap.3、Bitmap完成粒子爆炸特效。其实完成粒子爆炸特效的并不是控件View本身,而是Bitmap,将Bitmap分割成多个小球,小球在x轴上随机地左右晃动,在y轴上径直下落就行了。代码介绍:Particle: public abstr...

2019-06-23 21:01:44 1570 1

原创 Android 网络请求框架浅解析

本文只是用最简单的三言两语将网络请求框架最核心的原理叙述了一下,为了更深入的学习,还应该以查看源码学习为主。Activity、Service:调用类,一般在这里直接调用已经封装好的工具类方法即可。Http请求类:为了访问网络资源,使用时应该提供请求url,请求参数,回调监听器,请求方法等参数。网络请求框架中有如下几个重要的成员:1、请求队列,java中使用BlockingQueue类作为请...

2019-06-22 21:10:56 321

原创 android 搜索框中逐字搜索从数据库中获得数据并显示

233

2019-06-19 23:26:48 2620 2

原创 This view is not constrained. It only has designtime positions, so it will jump to (0,0) ...

This view is not constrained. It only has designtime positions, so it will jump to (0,0) at runtime unless you add the constraints less... (Ctrl+F1) Inspection info:The layout editor allows you to pl...

2019-06-19 17:22:32 6065

原创 Android 图片请求框架原理(手写请求框架)

主要3个类:BitmapRequest:网络图片请求类,()对应于图中的请求1、2、3、4……)包含各种请求参数,如:url,预加载图片等。RequsetDispatcher:请求分发类,是个线程,(对应于图中的消费窗口),负责请求的处理。在缓存中寻找是否之前把图片保存到缓存中,如果没有直接请求网络下载图片。RequsetManager:请求管理类,负责对请求类和请求分发类进行管理,负责生成...

2019-06-16 17:19:45 597

MyApplication17.zip

注解处理器使用方法,实现极易BindView

2022-01-17

ScaleImageView.zip

1、支持双击缩放,大图平移,fling效果 2、支持双指缩放

2021-12-22

MultiTouchView.zip

多点触控demo,主要有3种类型:1、接力型,某根手指按下后,下一根手指会抢夺当前手机的控制权,再一根手机也是;2、协作型,多根手机共同合作实现对某个控件的控制。3、互不干扰型,多根手机彼此之前没有联系,各自工作。

2021-12-21

PagerAdapter.zip

自定义实现简易PagerAdapter

2021-12-20

ViewTouchDrag.zip

android VIew拖动的2种使用方式demo:使用DragHelper和setOnDragListener分别使用

2021-12-20

MyApplication7.zip

绘制多行文本时绕过穿插的Bitmap

2021-11-22

Encode.Decode.Base64.alfredworkflow

Alfred软件的workflow,支持md5、base64等算法快速编解码

2021-10-31

MyApplication2.zip

编译插桩demo二个人个人挺好th

2021-10-17

MyApplication6.zip

通过hook技术实现跳转activity而不在AndroidManifest.xml中声明的办法

2021-10-06

Desktop.rar

ping值 traceroute检测.rar

2021-05-18

SettingChangeNotifyDemo.rar

手机验证码安全保护监听并取值,

2020-12-07

FlowLayout.rar

android单选复选框Demo,在以后如果需要用到的话可以快速的使用android单选复选框Demo,在以后如果需要用到的话可以快速的使用

2020-11-28

NetWorkDemo.rar

此Demo用于在wifi和移动网络同时开启的时候进行切换,方便用于之后的使用中可以随时找到

2020-11-24

DemoDemoDemo.rar

将文本中的带超链接的a标签的文本进行解析并设置跳转将文本中的带超链接的a标签的文本进行解析并设置跳转

2020-11-07

TestDemo.rar

Dialog动态调整RadioGroup中的Radio之间的相互距离,保证他们的间距都能够相同!!!!!!

2020-10-20

AVDemo.zip

android配置lame,并用lame将PCM音频数据转换为WAV数据和MP3数据。android配置lame,并用lame将PCM音频数据转换为WAV数据和MP3数据。

2020-09-30

pcmTest.pcm

PCM测试资源免费下载,随意下载,可随意转发!!PCM测试资源免费下载,随意下载,可随意转发!!PCM测试资源免费下载,随意下载,可随意转发!!

2020-09-30

SearchTextDemo.zip

资源下载,Demo.资源下载

2020-09-19

SlideDemo.zip

滑动冲突解决方案,通过设置一个自定义ViewGroup和若干ListView来演示发生滑动冲突时的事件分发策略,解决滑动冲突方法

2020-08-22

PhoneWallDemo.zip

Demo展示了二级缓存:内存缓存和磁盘缓存,从网络上下载图片文件并依次存入内存缓存和硬盘的过程。对后续开发的有一定的参考价值

2020-08-18

images.txt

这个文件中保存了用来做网络开发用的图片,都是从图库中下载的,将来的开发有很大的用处

2020-08-18

hookDemo.zip

在不改变代码的情况下,使用动态代理方法截取原方法的执行,并加入额外的逻辑实现。 反射,动态代理 hook

2020-07-14

componentizationDemo.zip

组件化项目Demo,通过在config.gradle中配置来将管理整体项目。当isRelease为true时表示整体项目为apk,其他为模块;当isRelease为false时表示整体项目可拆分为多个模块,各个模块的开发互补干扰。

2020-06-02

BigBitmapDemo.zip

使用BitmapRegionDecoder(提升加载Bitmap的性能)随着屏幕的滑动动态的加载竖屏长图(暂不支持横屏加载)

2020-05-23

SquareUtils.java

Okhttp延伸的进度条辅助方法,工具类。实现进度条方法的工具类

2020-05-20

Archive.zip

Android Binder Demo,进程A中的应用A使用AIDL打开进程B的应用B应用然后将信息数据返回

2020-04-29

MVVP2Demo.rar

Databinding Demo,不是MVVP,MMVP是一种思想,Databinding是一种工具,要分清!!!!!!!!!!!!!

2020-04-22

MVVM1Demo.zip

MVVM演示代码

2020-04-19

MVPDemo2.zip

MVPDemo2

2020-04-18

ASpectJ_LoginDemo.zip

AspectJ的演示代码,配合blog食用更佳!

2020-04-15

OpenGLDemo.zip

Android使用Open GL绘制一个等腰三角形(GLES20),而不是使用View的API来绘制.

2020-04-11

空空如也

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

TA关注的人

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