Android自定义View的一些不知道的细节
来源:互联网 发布:thinkphp隐藏index.php 编辑:程序博客网 时间:2024/05/21 02:34
原因:
之所以写这个主要是因为我自认为自己对自定义View已经了如指掌,但是后来才发现自己犯了很多低级错误。
详解:
按照源码的注释,View的绘制过程是这样子的:
/* * Draw traversal performs several drawing steps which must be executed * in the appropriate order: * * 1. Draw the background * 2. If necessary, save the canvas' layers to prepare for fading * 3. Draw view's content * 4. Draw children * 5. If necessary, draw the fading edges and restore layers * 6. Draw decorations (scrollbars for instance) */
先绘制背景,如果有必要,保存画布层,绘制内容,绘制孩子,绘制渐变,绘制装饰物。
让我们再看下源码的draw()方法里的一段代码
if (!verticalEdges && !horizontalEdges) { // Step 3, draw the content if (!dirtyOpaque) onDraw(canvas); // Step 4, draw the children dispatchDraw(canvas); // Step 6, draw decorations (scrollbars) onDrawScrollBars(canvas); // we're done... return; }从这里我们可以看出draw方法的调用过程是这样子。
onDraw -> <span style="font-family: Arial, Helvetica, sans-serif;">dispatchDraw -> </span><span style="font-family: Arial, Helvetica, sans-serif;">onDrawScrollBars</span>
这样我们基本可以明白我们重写的onDraw方法是干什么的了,以及draw() ondraw() dispatchdraw的关系了。
如果你想在最顶层绘制,直接重写draw方法,因为draw方法里包含ondraw和dipatchdraw。
其实主要想写的一个细节就是这个东西。
如果你想让你绘制的东西一直在控件的某个位置一定要这样写
canvas.translate(getScrollX(), getScrollY());
这里就不解释了,明白了我之前说的就知道为什么要这么写了。我重写了listview然后发现我写的控件会出现跳帧现象,就是在滑动的时候出现fading edges的时候,后来才发现是因为这个原因。
1 0
- Android自定义View的一些不知道的细节
- Android Service中一些你不知道的细节
- Android 你不知道的自定义View(一)
- Android自定义view 必须知道的 Android View绘制流程
- [Android] 你所不知道的drawable的那些细节
- Android推送通知那些你不知道的细节
- Android 禁止ViewPager滑动,你所不知道的细节
- Android 禁止ViewPager滑动,你所不知道的细节
- android一些你知道的或不知道的style
- Android自定义View的一些理解
- Android 自定义View的一些总结
- android 积累一些自定义view的知识
- Android 自定义View的一些使用技巧
- android Notification自定义view(view不更新的问题)
- 你或许不知道的javascript细节
- 你不知道的JavaScript细节整理
- scala细节-你不知道的'_'
- WebView你所不知道的细节
- ubuntu14.04 root 登陆
- ksoap2调用webservice
- iOS获取当前时间 NSDate(NSCalendar)获取当前时间
- macbook 终端颜色配置
- Struts2笔记
- Android自定义View的一些不知道的细节
- labview 栈和队列
- Android Editable
- android 5.0 apk 安装失败提示INSTALL_FAILED_INVALID_URI
- 开发者必备工具-加密算法SDK
- 关于JavaScript的那些话
- java面向接口编程
- NandFlash简介
- java基础7