Android
文章平均质量分 86
leilifengxingmw
生活有诗和远方,还有她。
展开
-
RecyclerView notifyItemChanged 之后的源码分析
i >= 0;//注释1处,记录动画之后的所有ViewHolder信息 animationInfo,保存到 mViewInfoStore 中//注释2处,之前变化的ViewHolder的动画信息。= null &&!// 保存到 mViewInfoStore 中} else {//变化的ViewHolder,之前的动画信息//注释3处,变化的ViewHolder之后的动画信息添加到 mViewInfoStore 中。原创 2024-03-28 16:47:33 · 719 阅读 · 0 评论 -
RecyclerView 调用 notifyItemInserted 自动滚动到底部的问题
在我们的例子中,HeadViewHolder 的 position = 0,从 0 开始 notifyItemInserted,会将 HeadViewHolder 向下偏移。然后开始布局的时候,position = 4 的位置 itemType 是正常的ViewHolder,所以 position = 4 的位置布局的是正常的ViewHolder。为什么会结束呢,在我们的例子中,remainingSpace = 2255 ,布局完 144 + Math.abs(-2700),已经大于 2255 了。原创 2024-03-28 11:49:15 · 952 阅读 · 0 评论 -
RecyclerView notifyItemRemoved 之后的源码分析
注释1处,调用addAnimatingView 方法。注释2处,动画结束。当我们调用Adapter的 notifyItemRemoved 方法的时候,会调用RecyclerView的 requestLayout 方法,然后会调用RecyclerView的 onLayout 方法,然后会调用 RecyclerView 的 dispatchLayout 方法。回到 dispatchLayoutStep1 方法,注释4处,新创建的ViewHolder,满足条件,记录新创建的ViewHolder的动画信息。原创 2024-03-24 12:15:12 · 748 阅读 · 0 评论 -
RecyclerView notifyItemInserted 之后的源码分析
分析场景:RecyclerView使用线性布局,方向为竖直方向,布局从上到下,宽高都是 MATCH_PARENT。开始就2条数据。然后新插入的1条数据会插入到position=1的位置上。把原来的position=1的数据挤到屏幕之外。原创 2024-03-20 20:42:01 · 875 阅读 · 0 评论 -
RecyclerView notifyDataSetChanged 之后的源码分析
使用线性布局,方向为竖直方向,布局从上到下。宽高都是MATCH_PARENT。首次设置适配器以后,更改数据(注意,数据的数量没有变化),然后调用。没有手动去滚动RecyclerView。原创 2024-03-18 19:58:20 · 901 阅读 · 0 评论 -
RecyclerView源码分析之二 滚动时候的ViewHolder的回收和复用
RecyclerView 使用线性布局,方向为竖直方向,布局从上到下。第一次设置 LayoutManager 和 Adapter ,正常显示数据以后,滚动 RecyclerView。**其他注意的点:**在调试过程中发现,GapWorker 的 prefetchPositionWithDeadline 方法干扰到 RecyclerView 的回收和复用过程。有时候会导致 导致 Recycler.mCachedViews的 size变成了3(默认是2)。这个不是主要流程,我们先忽略,有兴趣可以仔细研究研究。原创 2024-03-18 16:54:14 · 935 阅读 · 0 评论 -
RecyclerView第一次设置LayoutManager和Adapter之后的源码分析
注释2.1处,Note: 注意,当我们在布局里设置 RecyclerView 的宽高为 match_parent 的时候, 这里的 widthMode 和 heightMode 都是 MeasureSpec.EXACTLY,会直接return。注释2处,偏移所有的子View,保证RecyclerView的第一个子View的top坐标就是RecyclerView的top坐标减去RecyclerView的paddingTop。scrollBy 方法的注释1处,注意,这里继续调用fill方法填充子View。原创 2024-03-16 12:06:57 · 805 阅读 · 0 评论 -
Android 使用.9图 NinePatchDrawable实现动态聊天气泡
Android 使用png动态构建.9图 NinePatchDrawable ,实现动态聊天气泡效果,或者静态聊天气泡效果。原创 2023-11-07 22:08:33 · 874 阅读 · 4 评论 -
PAGView在RecyclerView中复用Item导致PAGView无法播放的问题
先说解决方法:将版本号升级到大于等于的版本可以解决问题。官方已经修复了这个问题。。低于这个版本都有问题。我们项目中的版本是。原创 2023-02-08 11:02:55 · 996 阅读 · 0 评论 -
Android 如何改变View的绘制层级
Android 改变View的绘制层级原创 2022-10-23 11:59:46 · 4383 阅读 · 0 评论 -
Android Resource是如何获取颜色和图片的
首先扯点别的:上海天气真的是太热了。我们使用的颜色通常有两种,一种是在 文件中定义的普通的16进制的颜色。一种是在 目录下定义的xml格式的颜色文件。这种颜色是一个selector对象。例如: color_list.xml加载颜色,调用 Resources 的 getColor() 方法。注释1处,获取正常的16进制颜色并返回。注释2处,获取在src/main/res/color 目录下定义的xml格式的颜色。调用 ResourcesImpl 的 loadColorStateList 方法。注原创 2022-07-10 12:12:27 · 1287 阅读 · 0 评论 -
Android 基础知识
Android系统架构Android 系统架构大致分为四层:Linux内核层,系统运行库层,应用和框架层,应用层。 Linux内核层 :为Android设备的各种硬件提供底层驱动。如显示驱动,音频驱动,照相机驱动,蓝牙驱动,WI-FI驱动,电源管理等。 系统运行库层:这一层通过C/C++库来为Android系统提供了主要的特性支持。如SQlite库提供了数据库支持,OpenG原创 2017-05-23 22:07:18 · 1122 阅读 · 0 评论 -
CardView是怎么实现阴影的?
Build.VERSION.SDK_INT >= 21实现原理Build.VERSION.SDK_INT >= 21,也就是Android版本5.0及以上采用了 Material Design 设计语言,引入了 Z 轴的概念,也就是垂直于屏幕的轴,Z 轴会让 View 产生阴影的效果。Android Material Design 阴影实现所以在Android版本5.0及以上很简单,就是Z轴实现的阴影。但是有一点需要注意,使用CardView的时候,CardView要距离父布局有一定的ma原创 2021-08-15 15:59:54 · 2951 阅读 · 0 评论 -
CardView是怎么实现圆角的?
源码版本:androidx1.0.0最基本的使用方式,添加了app:cardCornerRadius属性,就可以实现圆角了。app:cardElevation是用来实现阴影效果的,我们暂时不管阴影。Build.VERSION.SDK_INT >= 21实现原理我们先看Build.VERSION.SDK_INT >= 21,也就是Android版本5.0及以上的是如何实现圆角的。先说一下5.0及以上的结论:给CardView设置一个圆角矩形的背景。使用该背景作为轮廓剪裁CardView原创 2021-08-10 22:45:49 · 3253 阅读 · 0 评论 -
Android属性动画之旋转动画
旋转动画有三种绕着竖直中心线旋转绕着水平中心线旋转绕着中心点平面选择绕着竖直中心线旋转 val rotationYAnimator = ObjectAnimator.ofFloat(ivRotationY, "rotationY", 0f, 360f) rotationYAnimator.duration = 3000 rotationYAnimator.start()角度增加是逆时针方向旋转。注意,如果旋转角度是90度的话,最终View会不可见。当要旋转的View尺寸很小的时候,原创 2021-08-09 20:57:21 · 2608 阅读 · 0 评论 -
Android 混合模式之 PorterDuffXfermode
注意:在使用PorterDuffXfermode的时候,目标图像(DST)和图像(SRC)混合的操作要在一个新的图层上进行,否则当前的Canvas上的像素会影响混合操作。@Overrideprotected void onDraw(Canvas canvas) { //创建一个新的图层 int layerId = canvas.saveLayer(new RectF(), n...原创 2020-06-22 09:27:19 · 1268 阅读 · 0 评论 -
Android Studio 简单生成so文件并调用
平台:windows IDE :Android Studio 下载好ndk:下载地址 https://developer.android.com/ndk/downloads/index.html第1步:新建一个Android Studio 工程 JniHelloWorld。新建一个MyJni.java文件。 MyJni.javapublic class MyJni原创 2019-03-31 23:08:24 · 49055 阅读 · 17 评论 -
Android 上传library到jcenter
首先扯点别的:上海的天气最近也是挺热的,都是快到40度,随便出去走走就出汗。 今天记录一下上如上传Android 的library到jcenter。前提条件:已经正确注册了bintray账号。不会注册可以参考这个网址。http://blog.csdn.net/roly_yu/article/details/53486731注册完成以后找到Edit Your Profile这个选项输入你的密码,然后原创 2017-07-23 15:00:43 · 501 阅读 · 0 评论 -
ViewDragHelper简单使用
首先扯点别的:感觉保护好身体真的很重要,前几天膝盖又拉伤了,今天跑了会步感觉有点疼,看样最近一个月是不能跑步了。今天看了看鸿洋大神的ViewDrawHelper感觉写的不错,学习一下。ViewDrawHelper的类定义如下/** * ViewDragHelper is a utility class for writing custom ViewGroups. It offers a numbe原创 2016-09-04 22:14:06 · 1201 阅读 · 0 评论 -
Android 图片压缩
首先扯点别的:最近上海的天气也是热的不得了,早上跑步也不合适了,中午吃饭也没胃口。今天记录一下Android中的图片压缩。注意,为了简单,代码中需要的读写存储空间的权限已经在上一个页面申请过了。尺寸压缩改变图片的尺寸,比如说原来是1280×1902的变成640×320的。压缩图片的尺寸可以减少图片占用的内存大小。获取一个Bitmap占用内存大小的方法,可以使用Bitmap的ge...原创 2017-07-04 21:23:16 · 511 阅读 · 0 评论 -
ViewPager简单使用以及如何移除当前的Fragment
首先扯点别的:最近新租了一间房子,二楼向阳,有一个向阳的大窗户,350块一个月,总体来说不是很满意,以前租的是一个一楼的,没有阳光,挺冷的,但是用水啥的都挺方便,搬到这个二楼的房间用水相当不方便。失去了,才怀念。。。 今天总结一下如何删除ViewPager中的Fragment 代码如下: Fragment1:注意是android.support.v4.app.Fragmentimport a原创 2016-01-21 22:14:20 · 1609 阅读 · 0 评论 -
Android 软键盘汇总
首先扯点别的:我想问一下,如果一个你喜欢的女生如果把你当弟兄们对待,是什么意思?意思是只能做朋友? 今天记录一下如何监听软键盘的弹出和退出。监听软键盘的弹起直接上代码public class MainActivity extends AppCompatActivity implements ViewTreeObserver.OnGlobalLayoutListener { private s原创 2017-04-12 23:12:34 · 1226 阅读 · 3 评论 -
Android自定义View获取自定义属性
首先扯点别的:今晚回家做了一个鱼香肉丝,刚学的,出锅以后,才想起没有放豆瓣酱,也是没谁了。不过吃起来还行,吃了三块煎饼。今天记录一下自定义View的构造函数的使用,以及如何获取自定义属性。先看一下自定义View 的构造函数public class CustomView extends View { private static final String TAG = "CustomView";原创 2017-04-18 23:25:20 · 16107 阅读 · 0 评论 -
Android View ViewGroup 的measure过程
首先扯点别的:“光阴似箭,日月如梭”,这句话小学就知道了,随着年龄的增长,越来越觉得如此,人生如白驹过隙。毕业工作快一年了,但是感觉自己Android方面的基础知识还是不扎实,所以看看开发艺术探索,巩固提高自己。View 的measure过程:measure 过程决定了View的宽和高。measure完成以后,就可以通过getMeasuredWidth和getMeasuredHeight来获取...原创 2019-07-11 22:50:14 · 1330 阅读 · 0 评论 -
Fragment 懒加载
首先扯点别的:今天买回家的火车票,12306还是没让我失望,果断没有抢到。先买了一个飞机票,然后等着抢明天的火车票,如果抢到了就把飞机票退了,不然就得坐飞机了。今天记录一下 Fragment 懒加载关于Fragment的懒加载有以下两点先声明一下:1.Fragment 的 setUserVisibleHint方法, 只有 Fragment 在 ViewPager 里才会被调用//如原创 2018-01-15 22:21:57 · 466 阅读 · 0 评论 -
ViewPager实现无限循环轮播图控件
首先扯点别的:今天周天——阴雨天气好久之后的第一个晴天,阳光明媚,温度也还可以,真的适合开车出去玩。但是没有车,好吧,那就坐地铁出去。**经苗哥(csdn博客http://blog.csdn.net/roly_yu/article/details/53123617),介绍,发现了github上一个比较牛逼的ViewPager实现无限循环轮播控件BGABanner-Android,效果也是没谁了原创 2016-11-27 14:33:31 · 887 阅读 · 2 评论 -
菜鸟看源码之SparseArray
Android SparseArray 源码分析SparseArray 将整数映射到对象。和普通的对象数组不一样,SparseArray的元素之间可以有间隙。和使用HashMap将整数映射成对象相比,SparseArray 效率更高(关于SparseArray 和HashMap的效率的对比,请看文末的参考链接2),因为SparseArray 避免的键的自动装箱,而且对于每个映射,SparseA原创 2018-01-09 23:02:45 · 511 阅读 · 0 评论 -
菜鸟看源码之AsyncTask
首先扯点别的:今天是第二天上班,看了看日历已经是2月23号了,2018年还剩9个多月。真是感觉人生如白驹过隙啊。今年自己竟然不知不觉已经26周岁了,趁着还算比较年轻(再过个3,4年这话就不好说了),努力奋斗!今天梳理一下AsyncTask的源码这部分文字叙述摘抄自郭霖老师的博客 Android AsyncTask完全解析,带你从源码的角度彻底理解 先看基本的使用方法:由于AsyncTas...原创 2019-02-14 09:20:47 · 329 阅读 · 0 评论 -
ThreadPoolExecutor是怎样执行任务的
先扯点别的:最近被公司外派到了嘉定区,新租了一个房子,马马虎虎,每天走路上班大约30分钟。早上8点半上班,下午5点半下班,和以前的作息规律有点不一样,逐渐适应,调整,然后还得把跑步这项运动坚持下来。这篇文章(一天写不完)探索一下Java中的ThreadPoolExecutor的使用,感觉还是挺重要的。如果出去面试能把这个讲清楚,估计能唬住不少面试官,哈哈。 先给出一个简单的使用示例,然后再探...原创 2018-03-16 23:06:59 · 4911 阅读 · 2 评论 -
Android Context继承结构图
好久没在csdn写博客了,哈哈。原创 2019-06-16 18:47:04 · 746 阅读 · 0 评论 -
getDimension()、getDimensionPixelSize()、getDimenPixelOffset()
简书同步发布简书链接:getDimension()、getDimensionPixelSize()、getDimenPixelOffset()我们在自定义View的时候,通常会指定自定义View的字体大小,然后我们获取字体大小的时候,可以有三个方法供选择。getDimension()getDimensionPixelSize()getDimenPixelOffset()这三个方法的...原创 2019-09-26 22:34:12 · 929 阅读 · 0 评论 -
如何实现动态添加布局文件(避免 The specified child already has a parent的问题)
首先扯点别的:我应经连续上了两个星期的班了,今天星期一。是第三个周。这个班上的也是没谁了。最近老是腰疼。估计是累了。最近也没跑步。今天下班继续跑起。这篇文章讲一讲如何在一个布局文件中动态加在一个布局文件。避免出现The specified child already has a parent. You must call removeView() on the child’s parent firs原创 2016-04-18 16:12:19 · 8844 阅读 · 2 评论 -
Android 属性动画使用(三)
首先扯点别的:今天看了看十月一回家的火车票,只能说艰难,只剩下一张无座的票了,而且还是从下午一点到次日凌晨4点的慢车,太漫长了。难道临沂到上海就不能修一条高铁吗!看样这次得坐汽车了。继续总结 Android 属性动画的使用经过前面的学习,我总结了,无论是使用ValueAnimator还是ObjectAnimator,它们之所以能够完成从初始状态到结束状态的过渡,是因为必须有一个继承自TypeEval原创 2016-09-04 11:57:21 · 796 阅读 · 0 评论 -
Android 属性动画使用(二)
首先扯点别的:晚上稍微跑了一会步,然后逛了超市,晚饭喝的南瓜粥,吃了一碗面条,今天不是太饿,现在正一边吃着葡萄一边学习,也是没谁了。文章参考自郭霖老师的博客,http://blog.csdn.net/guolin_blog/article/details/43816093。比如说,我们想要实现从0过渡到100,使用ValueAnimator 就可以这样写:ValueAnimator va = Val原创 2016-09-03 22:57:13 · 500 阅读 · 0 评论 -
Android 属性动画使用(一)
首先扯点别的:感觉自己好久没有用笔写过字了,下午去超市每个小本子,写写诗,练练字,陶冶一下情操,也不能有事没事就喝酒。今天记录一下自己学习属性动画的过程,是看着郭霖大神的博客,链接会在文章末尾贴出。1 ValueAnimator ValueAnimator 。给它一个初始值和结束值,以及动画的时间,ValueAnimator 会自动计算在动画时间内如何从初始值过渡到结束值。 1.使用场景1:原创 2016-09-03 17:52:00 · 920 阅读 · 0 评论 -
android.support.v7.widget.AppCompatTextView cannot be cast to android.app.Activity
在使用ButterKnife的时候,有时候会出现 类似标题中的错误,错误的原因还是因为自己不小心啊,绑定控件的时候绑定错了 @BindView(R.id.btn) TextView btn; @BindView(R.id.textView) Button textView;明显R.id.btn 应该是Button类型,R.id.textView 是TextView 类型,原创 2016-08-21 11:09:29 · 14192 阅读 · 0 评论 -
ListView的下拉刷新和上拉加载(一)
今天说一说ListView的下拉刷新和上拉加载的初步实现,感觉自己写的东西基本上就是拾人牙慧,几乎没什么创新,就是把别人的东西东拼西凑来实现自己的需求。但是还是能学到点东西的,至少以后自己再遇到同样的请求可以看自己的总结就行了。下拉刷新参考网址:github地址https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh上拉加载参考网址http原创 2016-08-21 10:45:19 · 575 阅读 · 1 评论 -
RecyclerView 下拉刷新和上拉加载(一)
今天总结一下RecyclerView 使用LinearLayoutManager的下拉刷新和上拉加载。 下拉刷新参考网址:github地址https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh关于下拉刷新结合上拉加载的更多的例子请参考这个网址: https://github.com/shucc/RecyclerViewDemo 我所原创 2016-08-17 22:38:17 · 1815 阅读 · 0 评论 -
EventBus 3.0 简单使用
今天周六,可谓是阳光明媚啊,早上一觉睡到九点,昨天晚上喝了一瓶啤酒,睡眠质量就是高啊。今天洗了洗衣服,晒了晒被子,刷了刷鞋,然后跑着去了超市,买了点东西,主要是买的苹果和啤酒。还买了蛤蜊,自从毕业以后就没吃过蛤蜊,晚上炒个蛤蜊喝点啤酒,也是没谁了!进入正题EventBus 3.0 简单使用,绝对不是老司机。参考网址,EventBus 官网 EventBus 刘望舒csdn EventBus原创 2016-08-27 18:42:48 · 619 阅读 · 0 评论 -
Android和Html5交互简单使用
今天记录一下自己接触不多的Android和hml5交互简单使用 参考网址如下 http://blog.csdn.net/leejizhou/article/details/50894531 http://blog.csdn.net/fengyuzhengfan/article/details/38326861 https://developer.android.com/guide/webap原创 2016-08-06 11:31:36 · 2174 阅读 · 1 评论