关于Android中View的Canvas的探讨
来源:互联网 发布:淘宝精选是怎么回事 编辑:程序博客网 时间:2024/06/13 23:28
近日在写自定义控件的时候发现通过addView方式添加到viewGroup的内容在重写onDraw的时候没有发生变化,考虑可能是图层不同。
此处通过
LayoutInflater.from(context).inflate加载XML生成控件
通过setWillNotDraw(false);使得onDraw有效
重写的onDraw方法
这里插入新的背景后之前的内容依然存在而且是在上层
最终真机效果如下
查看源码没有说明关于canvas的具体内容只知道 点击打开链接
对于视图层次树中的View,通过 Measure 和 layout 两个过程之后,便可确定其大小和位置,视图在绘制的过程中,根据其mLeft, mRight, mTop, mButtom, mScrollX和mScrollY等参数,将父节点传过来的Canvas进行剪切操作,得到新的Canvas,该剪切区便是父节点分配给子节点的视图区域,其源代码如下:
if ((flags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN &&
!useDisplayListProperties && cache == null) {
if (offsetForScroll) {
canvas.clipRect(sx, sy, sx + (mRight - mLeft), sy + (mBottom - mTop));
} else {
if (!scalingRequired || cache == null) {
canvas.clipRect(0, 0, mRight - mLeft, mBottom - mTop);
} else {
canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight());
}
}
}
Canvas之所以要这么设计的主要原因是,为了View的绘制,通过这种方式,使得View每次绘制是,都可以该视图的原点坐标作为绘制的原点坐标,而独立于其他View,使得绘制逻辑大大简化。
希望看到的朋友可以讨论看看我的理解是否正确,谢谢。
- 关于Android中View的Canvas的探讨
- Android自定义View的探讨
- Android自定义控件View的探讨
- Android自定义控件View的探讨
- Android自定义控件View的探讨
- Android自定义控件View的探讨
- Android自定义控件View的探讨
- Android自定义控件View的探讨
- Android自定义控件View的探讨
- Android自定义控件View的探讨
- Android中父View和子view的点击事件处理问题探讨
- 【Android】自定义View之Canvas的使用
- Android Canvas 与 View之间的关系
- 【Android】【自定义View】canvas的方法大全
- Android自定义View的Canvas操作
- Android自定义View,paint+canvas的使用
- 关于iOS 中UIViewController的生命周期以及相关视图(View)的探讨
- Android中关于View的ScrollTo、ScrollBy
- ListView组件
- 自定义View之自定义按键圆角边框背景
- win7+MySQL5.7.18zip版本安装
- 安卓的系统架构
- 【排序算法】 插入排序 insertion sort(插入类排序)
- 关于Android中View的Canvas的探讨
- spring boot正常启动后,页面报404问题
- 逻辑运算符与(&)、或(|)、非(!)、异或(^)及双与(&&)和双或(||)
- MySQL忘记密码的正确解决方法
- 关于判断某一数组内容是否为一个二叉搜索树的后序遍历结果
- SSH关闭远程密码登录---Window&Linux客户端证书登录&window找不到ssh-keygen
- 用volley框架进行网络访问
- Unity5.x学习笔记(2)-物体向上飞
- 记录一下先前对WEBRTC的服务器搭建