首页
学习
活动
专区
工具
TVP
发布

李蔚蓬的专栏

专栏成员
239
文章
347014
阅读量
33
订阅数
自定义View | 基础概述 & 自定义TextView实战 & 基于源码分析自定义View继承自ViewGroup时无法正常绘制的问题
(f.bottom - f.top)/ 2 = View的一半高度(文字底部到View中线的距离) getHeight()是View的一半高度的位置的y坐标; dy = (f.bottom - f.top)/ 2 - f.bottom (基线与View中线间的距离)
凌川江雪
2020-08-31
1.1K0
Android内存优化 | LeakCanary/Profiler & 非静态内部类耗时操作 实战分析
使用Profiler, 选择一段陡增的曲线, 选择恰当的排序方式: 也可以看到InnerClassActivity被各种点名:
凌川江雪
2020-08-17
6590
Flutter | 动画概述、类型
实现方式 Tween动画 缩放、旋转、平移、透明度、淡入淡出等 AnimatedBuilder Animated的建造者类, 可以把需要添加动画的组件传进去, 然后借助它实现一些动画效果; AnimatedContainer 在Container的基础上,加了一些动画效果, 让Container中的组件等,也可以实现动画; Hero动画 一种共享动画的形式, 通过它,我们可以在不同的界面中,共享 共享元素的内容, 这样当 一个界面 跳到 另外一个界面 的时候, 这些共享元素 就可以实现
凌川江雪
2020-07-14
4720
Flutter | 常用带事件处理的组件详解(主要IconButton 、ToggleButton)
icon:icon组件,可以用原生的封装; onPressed:匿名函数,实现的点击事件; 代码:
凌川江雪
2020-07-07
9770
Flutter | 手势操作详解、单独一种类型的事件处理顺序、多种类型的事件混合时的处理顺序
GestureDetector的child,用来放 需要实现 某种手势事件 的组件; 【这里GestureDetector封装的是 显示 模拟手机号 的文本组件】:
凌川江雪
2020-07-07
1.9K0
Flutter | 常用组件分类、概述、实战
AppBar(title属性,Text组件; action:动作响应;!!!! titleSpacing:标题文字间距; toolbarOpacity:标题透明度;)
凌川江雪
2020-06-16
4.2K0
Flutter | 环境搭建、检测,Hello World项目,Flutter常用命令行
或者直接找个地方用git下载(推荐): git clone https://github.com/flutter/flutter.git
凌川江雪
2020-06-08
5840
Flutter概述、原理 & 跨平台历史及各方案比较 & Dart概述
1.Android&IOS双端开发线开发周期较长, 为了尽快推出产品,减少开销、缩短开发周期、提高开发效率, 从而产生跨平台方案;
凌川江雪
2020-06-02
2K0
NDK和JNI概要
NDK:Native Development Kit(Kit n.配套元件)是一系列工具的集合; 它提供了一系列的工具,帮助开发者快速开发C/C++的动态库, 并能自动将so和Java一起打包成apk;
凌川江雪
2020-05-26
5050
Java设计模式 | 工厂模式解析与实战
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。 复杂对象适合使用工厂模式, 简单用new就可以完成创建的对象无需使用工厂模式。
凌川江雪
2020-04-14
4920
设计模式 | MVC、MVP、MVVM详析
MVC优缺点 【缺点】MVC的耦合性还是相对较高, View可以直接访问Model,导致3者之间构成回路。 因此, 【MVP与MVC的主要区别】是, MVP中的View不能直接访问Model, 需要通过Presenter发出请求,View与Model不直接通信。 另外, 耦合性高的MVC,相对于MVP、MVVM, 可读性、健壮性、可拓展性都大打折扣,也不便于测试; 【MVC缺点的对立面,就是MVP、MVVM的优点】 【优点】简单粗暴,适合简单项目 MVP优缺点 【缺点】对于简单的应用来说
凌川江雪
2020-04-14
1.9K0
Java设计模式 | 观察者模式解析与实战
定义对象间一种一对多的依赖关系, 使得每当一个对象改变状态, 则所有依赖于它的对象都会得到通知并被自动更新。
凌川江雪
2020-04-14
8800
Android卡顿优化 | 卡顿单点问题监测方案
下面项目准备了几个类型的单点问题模拟, 运行程序,查看logcat: 【注意, 在打印的时候我加了一个logTAG即ARTHookTest, 所以在查看logcat的时候可以定位ARTHookTest这个关键词, 方便调试!!!】 -IPC;IO类型单点问题;
凌川江雪
2020-04-09
2.3K0
Android卡顿优化 | 自动化卡顿检测方案与优化(AndroidPerformanceMonitor / BlockCanary)
当然,我们可以在logcat中定位关键词blockInfo, 看到同样的详细的信息:
凌川江雪
2020-04-09
2.5K0
Android卡顿优化 | AndroidPerformanceMonitor(BlockCanary)源码详析(真的很详细哦!)
1. 【监控周期的 定义】 blockCanary打印一轮信息的周期, 是从主线程一轮阻塞的开始开始,到阻塞的结束结束,为一轮信息; 这个周期我们也可以成为BlockCanary的监控周期/监控时间段;
凌川江雪
2020-04-09
1.4K0
Android卡顿优化 | ANR分析与实战(附ANR-WatchDog源码分析及实战、与AndroidPerformanceMonitor的区别)
运行程序,等到程序ANR或崩溃, 在Terminal使用刚刚提到的命令,导出ANR的信息文件:
凌川江雪
2020-04-09
5K2
Android开发艺术笔记 | View的事件分发机制原理详析与源码分析(ing)
(2)【处理事件,独一无二】 正常情况下,一个事件序列只能被一个View拦截且消耗!!! 这一条的原因可以参考(3), 因为一旦一个元素拦截了某此事件, 那么同一个事件序列内的所有事件都会直接交给它处理!!! 因此同一个事件序列中的事件不能分别由两个View同时处理!!! 除非, 将本该由某个View自己处理的事件 通过onTouchEvent强行传递给其他View处理。 (3)【事件序列,从一而终】 某个View一旦决定拦截,则这一个事件序列都只能由它来处理 (如果事件序列能够传递给它的话), 并且它的onInterceptTouchEvent不会再被调用!!! 当一个View决定拦截一个事件后, 那么系统会把同一个事件序列内的其他方法都直接交给它来处理, 因此 就不用再调用这个View的onInterceptTouchEvent去询问它是否要拦截了。 (4)【短期失信】 某个View一旦开始处理事件, 如果它不消耗ACTION_DOWN事件(onTouchEvent返回了false), 那么同一事件序列中的其他事件都不会再交给它来处理, 【即,View放弃处理ACTION_DOWN,便放弃了整个事件序列!!!】 并且事件将重新交由它的父元素去处理, 即父元素的onTouchEvent会被调用。【事件向上“回传”】 即, 事件一旦交给一个View处理,那么它就必须消耗掉!!! 否则同一事件序列中剩下的事件就不再交给它来处理了!!! 好比上级交给程序员一件事,如果这件事没有处理好, 短期内上级就不敢再把事情交给这个程序员做。 (5)【余粮上缴】 如果View不消耗除ACTION_DOWN以外的其他事件, 那么这个点击事件会消失, 此时父元素的onTouchEvent并不会被调用, 并且当前View可以持续收到后续的事件, 最终这些消失的点击事件会传递给Activity处理。 (6)ViewGroup默认不拦截任何事件。 Android源码中 ViewGroup的onInterceptTouch-Event方法默认返回false。 (7)View没有onInterceptTouchEvent方法,一旦有点击事件传递给它,那么它的onTouchEvent方法就会被调用。 (8)View的onTouchEvent默认都会消耗事件(返回true)!!!!!!! 除非它是不可点击的(clickable 和longClickable同时为false)。 View的longClickable属性默认都为false, clickable属性要分情况, 比如Button的clickable属性默认为true, 而TextView的clickable属性默认为false。 (9)【enable无用,clickable居上】 View的enable属性不影响onTouchEvent的默认返回值。哪怕一个View是disable状态的!!!!! 只要它的clickable或者longClickable有一个为true, 那么它的onTouchEvent就返回true!!! (10)onClick会发生的前提是当前View是可点击的,并且它收到了down和up的事件。 (11)【由外而内;以下犯上】 事件传递过程是由外向内的, 即事件总是先传递给父元素,然后再由父元素分发给子View, 通过requestDisallowInterceptTouchEvent方法可以在子元素中干预父元素的事件分发过程,但是ACTION_DOWN事件除外。
凌川江雪
2020-04-01
9590
Android卡顿优化 | 卡顿及其优化工具概述及StrictMode实践案例
项目GitHub 本文要点 一般使用的卡顿优化工具 卡顿问题概述 卡顿问题分析难点 关于CPU Profiler 关于Systrace 关于StrictMode 磁盘读写违例检测实战 实例限制检测实战 一般使用的卡顿优化工具 CPU Profiler Systrace StrictMode (strict adj.精确的; 绝对的; 严格的,严谨的; [植]笔直的 mode n.方式; 状况; 时尚,风尚; 调式 模式;) 卡顿问题概述 很多性能问题(如内存占用高、耗费流量等)都相对不容易被
凌川江雪
2020-04-01
2.4K0
Android开发艺术笔记 | View的滑动(三种普遍实现方式及其对比、实战)
View提供了专门的方法来实现滑动, 即scrollTo()和scrollBy(),这两个方法的实现如下:
凌川江雪
2020-03-26
7880
Android开发艺术笔记 | View的事件体系
关于如何得到View的这四个参数, 在View的源码中它们对应于mLeft、mRight、mTop和mBottom这四个成员变量,获取方式:
凌川江雪
2020-03-23
6390
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档