Android ViewGroup

一、概述

二、注意事项

1. 在派生类中,重写onDraw(...)方法,如果不给LinearLayout设置一个背景,系统是不会调用onDraw时,也就是说,我们重写的onDraw(...)是不会调用的。当设置一个背景后,onDraw就会被调用。ViewGroup本身是一个容器,其本身并没有任何东西可以绘制,它是一个透明的控件,所以,不给调用onDraw(...)方法。

 1 /**
 2  * If this view doesn‘t do any drawing on its own, set this flag to
 3  * allow further optimizations. By default, this flag is not set on
 4  * View, but could be set on some View subclasses such as ViewGroup.
 5  *
 6  * Typically, if you override {@link #onDraw(android.graphics.Canvas)}
 7  * you should clear this flag.
 8  *
 9  * @param willNotDraw whether or not this View draw on its own
10  */
11 public void setWillNotDraw(boolean willNotDraw) {
12     setFlags(willNotDraw ? WILL_NOT_DRAW : 0, DRAW_MASK);
13 }

  上面的解释可以看出,想重写ViewGroup.onDraw(...)方法,应该调用这个方法将flag清除。在构造方法中,调用setWillNotDraw(...)方法。

三、参考资料

1. 为什么ViewGroup onDraw方法不被调用?

时间: 2024-11-13 00:10:18

Android ViewGroup的相关文章

android ViewGroup getChildDrawingOrder与 isChildrenDrawingOrderEnabled()

getChildDrawingOrder与 isChildrenDrawingOrderEnabled()是属于ViewGroup的方法. getChildDrawingOrder 用于 返回当前迭代子视图的索引.就是说 获取当前正在绘制的视图索引.  如果需要改变ViewGroup子视图绘制的顺序,则需要重载这个方法.并且需要先调用 setChildrenDrawingOrderEnabled(boolean) 方法来启用子视图排序功能. isChildrenDrawingOrderEnabl

Android ViewGroup onInterceptTouchEvent

public boolean onInterceptTouchEvent (MotionEvent ev) Implement this method to intercept all touch screen motion events. This allows you to watch events as they are dispatched to your children, and take ownership of the current gesture at any point.

android ViewGroup和View触屏基础事件OnTouch处理

分发事件:dispatchTouchevent 截断事件:interceptTouchEvent 触摸事件:OnTouch 父视图的分发事件返回true,父视图处理触摸事件事件,父视图触摸事件返回false,由所在的activity处理:返回true,仍然可以接收到触摸事件: 父视图的分发事件返回false,则截断事件触发: 截断事件返回true,自己处理触摸事件,不交由子视图处理: 截断事件返回false,子视图分发事件: 截断事件false,处理事件true,子视图处理事件为true,则父视

Android ViewGroup 触摸事件传递机制

引言 上一篇博客我们学习了Android View 触摸事件传递机制,不了解的同学可以查看Android View 触摸事件传递机制.今天继续学习Android触摸事件传递机制,这篇博客将和大家一起探讨ViewGroup的触摸事件传递机制. 示例 示例代码如下: public class MainActivity extends ActionBarActivity { private String TAG = "MainActivity"; private MyViewGroup pa

Android ViewGroup触摸事件拦截详解

前言 在自定义ViewGroup中,有时候需要实现触摸事件拦截,比如ListView下拉刷新就是典型的触摸事件拦截的例子.触摸事件拦截就是在触摸事件被parent view拦截,而不会分发给其child,即使触摸发生在该child身上.被拦截的事件会转到parent view的onTouchEvent方法中进行处理.但是这个交互过程还是挺复杂的,有多种情况,今天我们就来分析一下吧.这篇分析文章已经放了一段时间了,如果有任何问题请高人指出. 触摸事件的分发 简单来说触摸事件的分发会经过这么几个顺序

Android ViewGroup触摸屏事件派发机制详解与源码分析

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 该篇承接上一篇<Android View触摸屏事件派发机制详解与源码分析>,阅读本篇之前建议先阅读. 1 背景 还记得前一篇<Android View触摸屏事件派发机制详解与源码分析>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事

Android ViewGroup使用小结

ViewGroup定义 在api中是这么描写叙述ViewGroup的:A ViewGroup is a special view that can contain other views. 依据意思我们能够明确.在ViewGroup中能够包括其它UI控件.包括我们的自己定义控件 优势及用处 我们了解UI控件最大的目的是使用它.而要了解控件.必须明确该控件的长处. ViewGroup在Android的UI控件中相对复杂,它的自己定义程度非常高.借助declare-styleable自己定义控件属性

(转)Android ViewGroup事件分发机制

3.关于拦截 1.如何拦截 上面的总结都是基于:如果没有拦截:那么如何拦截呢? 复写ViewGroup的onInterceptTouchEvent方法: [java] view plain copy @Override public boolean onInterceptTouchEvent(MotionEvent ev) { int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: //如果你觉得需

Android ViewGroup事件分发机制

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39102591,本文出自[张鸿洋的博客] 上一篇已经完整的解析了Android View的事件分发机制,今天给大家代码ViewGroup事件分发的源码解析~~凡是自定义ViewGroup实现各种滑动效果的,不可避免的会出现很多事件的冲突,对ViewGroup事件分发机制的了解,也有益于大家了解冲突产生的原因,以及对冲突进行处理~ 1.案例 首先我们接着上一篇的代码,在代码中添加一