
安卓
文章平均质量分 56
哒哒呵
这个作者很懒,什么都没留下…
展开
-
kotlin 提前退出方法函数(提前退出代码块)
方法函数原创 2022-10-23 14:02:36 · 1129 阅读 · 1 评论 -
EditText宽度不要受hint宽度控制
EditText宽度不要受hint宽度控制原创 2022-09-24 15:13:42 · 387 阅读 · 0 评论 -
android开发获取内存、Native内存和虚拟内存的方式
【代码】android开发获取内存、Native内存和虚拟内存的方式。原创 2022-08-27 10:49:40 · 1424 阅读 · 0 评论 -
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 · 1994 阅读 · 0 评论 -
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 · 5275 阅读 · 0 评论 -
绘制多行文本之中插入图片
概要在绘制多行文本的时候,经常会有多行图片中间插入一张图片的需求。此时文字应该做到在图片之外的空白区域完成绘制,如图:原创 2021-11-22 10:37:27 · 1701 阅读 · 0 评论 -
android开发 如何判断验证码安全保护是否关闭
目前在某为,小蓝小绿手机上存在验证码安全保护的功能,该功能开启时可能会导致应用自动读取验证码内容的失败,具体页面如下:该页面无法通过Intent跳转,(某为是这样,小蓝小绿没试过估计也是),通过AndroidManifest.xml分析发现此Activity设置的permission,而此权限是signatureOrSystem级别,因此普通APP无法在AndroidManifest.xml声明。APP在开发的时候只能提醒用户手机关闭它。那怎么判断它是否开启?这个开关其实在系统中对应的是一个属性,所以原创 2020-12-07 21:05:39 · 2348 阅读 · 0 评论 -
将文本中的带超链接的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 · 514 阅读 · 0 评论 -
RxJava zip操作符源码分析
zip操作符允许接受多个ObservableSource发射的数据,并能够将他们重新组合并重新发射的一种操作符。常见的使用方式:首先传入若干个ObservableSource,然后每个ObservableSource都能通过observer.onNext来发射数据,最终在Function接口实现方法中可以获取到这些数据,并做一个重新整合或其他操作,然后返回。比如这里我将获取的值相加然后返回,最终在Observer.onNext中能获取到值123:源码分析看看zip的实现:将传入的Functi原创 2020-08-27 19:00:33 · 506 阅读 · 0 评论 -
RxJava线程变换subscribeOn和observeOn源码分析
先看用法:在一个子线程中创建一个Observable发射,Observer接受数据的全过程,执行看看Log信息:可以看到onSuscribe,subscribe,onNext执行分别在不同的线程源码分析首先这样的链式写法非常简洁,但是对代码分析增加困难,所在以上代码可以转换成这样:可以看到转换成比较直观的代码调用;分别查看subscribeOn和observeOn:所以subThreadObservable即为一个ObservableSubscribeOn对象,mainThread原创 2020-08-27 13:37:11 · 513 阅读 · 0 评论 -
RxJava create和flatMap的源码分析
首先看看RxJava最基本的用法:create:创建一个Observable对象,然后subscribe一个Observer对象,翻译过来就是一个被观察者对象订阅了一个观察者对象(其实应该反过来比较符合逻辑,但是这样才更符合链式调用)代码看起来似乎无从下手,可以将它转换成这样:设置转成这样:这样好分析多了。。。通过Observable的create方法生成一个Observable对象,然后调用这个对象的subscribe方法并传入一个ObservableOnSubscribe对象。先从O原创 2020-08-26 14:57:31 · 251 阅读 · 0 评论 -
TabLayout设置Tab下的指示器与文字长度相同
TabLayout默认的Tab的下的指示器是充满整个Tab的:如果想达到指示器长度和文字长度一样长的效果,使用API:mTabLayout.setTabIndicatorFullWidth(false);或者在xml布局文件中的TabLayout标签设置:app:tabIndicatorFullWidth=“false”setTabIndicatorFullWidth默认为true效果如图:...原创 2020-06-17 21:54:03 · 1990 阅读 · 0 评论 -
Android换肤:从外存中读取皮肤包资源实现换肤
简介经过上篇的介绍,其实换肤的操作十分简单,简单的说就是A模式调用A资源文件,B模式调用B资源文件,C模式调用C资源文件,以此类推而已。这个资源文件,其实就是皮肤包,直接开撸资源文件包(皮肤包)首先是资源文件包,它是资源文件,所以它仅仅有一些资源而已,没有代码。这些资源可以自定义。(但是资源名字要与主项目的资源名字一致)然后build成apk文件后,就可以改成喜欢的名字,比如xx.skin,然后放入内置存储卡中:storage/emlated/0/demo地址:https://github.c原创 2020-05-31 20:31:00 · 790 阅读 · 0 评论 -
Android 白天黑夜模式切换换肤
简介Android换肤操作,我的理解就是高级的setTextColor、setBackground等操作,设置可以通过getWindow().getDecorView()获取xml布局中所有的View然后一个个判断、设置。但是这样做的效率十分低下。我们知道android的一个个View都是通过LayoutInflater渲染出来的,那能不能在一开始的时候就给View设置监听,让他们在activity加载后能随着操作的改变而改变呢?这是可以的!一首先从源码onCreate进入,康康View怎么被从xml原创 2020-05-26 19:52:59 · 1737 阅读 · 0 评论 -
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 · 1503 阅读 · 0 评论 -
dataBinding实现和原理分析
dataBinding是Google退出的数据绑定支持库,使用该库可以直接实现数据Model和页面的双向绑定。实现方法1、在app下的build.gradle的android{…}中添加: dataBinding { enabled = true }2、新建bean对象:在layout的xml文件中添加数据源:...原创 2020-04-22 16:06:59 · 801 阅读 · 0 评论 -
使用AspectJ完成AOP切面
面向切面的程序设计:通过横切关注点与业务主体进行一步分离,以提高程序代码的模块程度。举例来说,比如超级会员、会员、普通用户登录一个系统,那么他们都要使用到登录业务,这时就可以利用横向切面将整个业务分割出来,并植入一些代码,达到统一管理的效果。在Android开发中,可以使用AspectJ框架来实现。ASpectJ有2个重要的概念:PointCut(切入点)、JointPoint(连接点)切入点...原创 2020-04-16 10:15:48 · 449 阅读 · 0 评论 -
利用bsdiff完成app的增量更新
当手机app应用需要更新时,如果需要重新下载一个完成的应用apk文件,十分消耗流量。这时候就可以使用增量更新技术。增量更新可以使用bsdiff工具来完成,简单的说就是通过工具将旧的apk和新的apk进行比较,然后生成一个差异包,这个差异包的体积大小会远远地小于整个完整apk的大小。然后用户通过网络请求只需要下载这个差异包就可以完成应用的升级。首先通过网络下载bsdiff工具下载链接下载完...原创 2020-03-24 00:01:27 · 459 阅读 · 0 评论 -
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 · 542 阅读 · 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 · 1529 阅读 · 0 评论 -
录音识曲水波纹动画&加载时等待圈
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...原创 2019-12-22 16:44:52 · 844 阅读 · 0 评论 -
淘宝页面RecyclerView分析及阿里Vlayout框架使用与分析
淘宝APP基本上是我们每部手机上必备的APP了,进入它的主页,就可以发现一个十分复杂(貌似)的页面。可以发现布局似乎十分复杂,使用xx工具看看它的布局情况,主界面居然只有一个RecyclerView就能实现??原来淘宝使用了阿里团队开发的一个开源框架Vlayout,(全称VirtualLayou)implementation 'com.alibaba.android:vlayout:1.0....原创 2019-12-02 23:22:51 · 997 阅读 · 0 评论 -
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 · 576 阅读 · 0 评论 -
Android 手动实现RecyclerView
在Android开发中,RecyclerView是一个非常重要且经常用到的框架,它的功能十分强大,且性能很好。为了弄懂RecyclerView是怎么实现的,直接阅读源码是一个不错的选择,但是源码实在是繁琐,为了附加功能代码会干扰对基本原理代码的理解,很容易放弃,甚至得花上几天去搞懂它,实在没必要。本章通过简单的不能再简单的语句与图片搞懂RecyclerView最最基本的原理。首先搞懂这个英文名什...原创 2019-11-12 16:40:27 · 494 阅读 · 0 评论 -
Android平行动画(首次进入app显示)
在我们打开一个新的app时,几乎每个app都会有一个初始化动画显示,这个动画只显示一次,第二次打开就不会显示了,通常来说这个动画都在尽可能地向用户介绍这个app,也可以最大化的展示app的特点,亮点。比如这样:它被称为平行动画,它的实现很简单,只是一个简单的ViewPager和一个ImageView控件而已。<RelativeLayout xmlns:android="http...原创 2019-10-07 22:31:05 · 590 阅读 · 2 评论 -
Android 自定义简易属性动画
Android中封装了许多的动画效果,其中较常用的属性动画,写法如:ObjectAnimator.ofArgb(。。。)ObjectAnimator.ofInt(。。。)ObjectAnimator.ofFloat(。。。)其实都是通过不停的设置View类中的各种属性来实现的。如:setScaleX、setScaleY、setAlpha等。(可以自行去查看View的源码)。我们知道,如果图...原创 2019-10-06 22:48:46 · 178 阅读 · 0 评论 -
qq气泡实现
使用贝塞尔曲线绘制qq气泡,整个动画过程可分为4个过程:1、默认状态:此时显示一个气泡和一个消息框。2、连接状态:一个固定气泡(大小随着拖拽的长度变化而变化),一个移动气泡和它之上的消息框。3、分离状态,此时固定气泡消失,只有移动气泡(和它的消息框)随手指的移动而移动。4、消失状态:放开手指后气泡爆炸消失。将整个过程分割为这几个步骤,再分别实现每个步骤,整个过程就完成了!首先...原创 2019-09-30 00:35:03 · 951 阅读 · 0 评论 -
贝塞尔曲线(Bezier Curve)代码实现
实现贝塞尔曲线第一步弄清楚什么是贝塞尔曲线:在Android开发中,我们经常会碰到贝塞尔曲线的使用,如许多不规则图像的绘制。Android中的Path类提供了二阶贝塞尔曲线和三阶贝塞尔曲线的函数实现。分别是Path.quadTo()和Path.cubicTo(),通常来说这也足够了,但是如果需要4阶,5阶甚至更高阶的贝塞尔曲线,就不得不自己实现了。自实现贝塞尔曲线实际上非常简单。首先明白贝...原创 2019-09-29 11:51:51 · 3408 阅读 · 0 评论