`

Android View概述

 
阅读更多
Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的。AndroidUI界面的一般结构可参见下面的示意图:

可见,作为容器的ViewGroup可以包含作为叶子节点的View,也可以包含作为更低层次的子ViewGroup,而子ViewGroup又可以包含下一层的叶子节点的View和ViewGroup。事实上,这种灵活的View层次结构可以形成非常复杂的UI布局,开发者可据此设计、开发非常精致的UI界面。
一般来说,开发Android应用程序的UI界面都不会直接实用View和ViewGroup,而是使用这两大基类的派生类。
View派生出的直接子类有:AnalogClock,ImageView,KeyboardView, ProgressBar,SurfaceView,TextView,ViewGroup,ViewStub
View派生出的间接子类有:AbsListView,AbsSeekBar, AbsSpinner, AbsoluteLayout, AdapterView<T extends Adapter>,AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, AutoCompleteTextView,Button,CalendarView, CheckBox, CheckedTextView, Chronometer, CompoundButton,
ViewGroup派生出的直接子类有:AbsoluteLayout,AdapterView<T extends Adapter>,FragmentBreadCrumbs,FrameLayout,LinearLayout,RelativeLayout,SlidingDrawer
ViewGroup派生出的间接子类有:AbsListView,AbsSpinner, AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, CalendarView, DatePicker, DialerFilter, ExpandableListView, Gallery, GestureOverlayView,GridView,HorizontalScrollView, ImageSwitcher,ListView,
上面View、ViewGroup的直接子类和间接别子类中标记为红色的类是我们在应用开发中接触和用得比较频繁的类,需要大家重点熟悉和掌握,其详细的API及用法可参见SDK的说明。这里特别指出,ImageView是布局具有图片效果的UI常用的类,SurfaceView是常用来进行游戏开发的空间,与一般View相比较它是特殊的并且非常重要的类(后续会对原理作深入分析),而AbsoluteLayout、FrameLayout,LinearLayout, RelativeLayout这几个ViewGroup的直接子类是Android UI布局中最基本的布局元素。
值得一提的是,上述的所有基类、派生类都是Android framework层集成的标准系统类,开发者在应用开发中可直接引用SDK中这些系统类及其API。但事实上,在UI开发的很多场景下,直接使用这些系统类并不能满足应用开发的需要。比如说,我们想用ImageView在默认情况下加载一幅图片,但是希望在点击该View时View变换出各种图像处理效果,这个时候直接使用ImageView是不行的,此时我们可以重载ImageView,在新派生出的子控件中重载OnDraw等方法来实现我们的定制效果。这种派生出系统类的子类方法我们通常称之为自定义控件。自定义控件可像标准View控件那样在XML及我们的Java文件中进行布局和实例化,但在布局时必须指出其完整的包名和类名。事实上,自定义控件的使用是我们进行Android 开发的必不可少的基本用法,是必须掌握的基本技巧。

View和ViewGroup最重要的几个方法——
protected void onDraw(Canvas canvas):View类中用于重绘的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,也是Android UI绘制最重要的方法。开发者可重载该方法,并在重载的方法内部基于参数canvas绘制自己的各种图形、图像效果。
protected void onLayout(boolean changed, int left, int top, int right, int bottom):View类中布局发生改变时会调用的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,重载该类可以在布局发生改变时作定制处理,这在实现一些特效时非常有用。
protected void dispatchDraw(Canvas canvas):ViewGroup类及其派生类具有的方法,这个方法主要用于控制子View的绘制分发,重载该方法可改变子View的绘制,进而实现一些复杂的视效,典型的例子可参见Launcher模块Workspace的dispatchDraw重载。
protected boolean drawChild(Canvas canvas, View child, long drawingTime)):ViewGroup类及其派生类具有的方法,这个方法直接控制绘制某局具体的子view,重载该方法可控制具体某个具体子View。
View、ViewGroup是Android UI体系至关重要的两大基类,本文仅对一些最基本的概念、原理和API进行了介绍,大家要全面掌握还需要阅读SDK中对这两个类的介绍并熟悉其API ,并在应用开发中逐渐的加深理解和掌握其用法。
  • 大小: 25.1 KB
分享到:
评论

相关推荐

    Android代码-一个使用openGL渲染的炫丽Android动画库 MagicSurfaceView

    android-magic-surface-view 这是一个 android 动画特效库, 可以实现各种炫酷动画。 1. 安装 gradle: dependencies { compile 'com.gplibs:magic-surface-view:1.1.1' } 2. 一些示例效果 此文档只做一些简单说明...

    Android如何获取子View的位置及坐标详解

    1.1、View 概述 视图 (View) 是一个容器,专门负责布局。表现为显示在屏幕上的各种视图,如 TextView、LinearLayout 等。 1.2、View 分类 View 主要分为两类,具体如下表格所示: 类别 示例 特点 单一...

    Android代码-Android-Architecture

    概述 该项目结合 MVP 与 Clean 架构思想,探索在 Android 项目上的最佳实践。 遵循 Clean Architecture 的原则。 数据层(Data Layer):加入数据转换层(Mapper)将服务端数据模型(Entity)与本地数据模型...

    android开发揭秘PDF

    5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像旋转 5.2.7 图像缩放 5.2.8 ...

    Android应用开发详解

    Android 应用案例——备忘录,通过一个Android基础应用项目综合应用了Android中的各种组件,包括Activity、Service、Broadcast Receiver、ContentProvider、Intent和View的应用 第18章 Android应用案例——无线点餐...

    Android项目ListView保持在列表的顶部固定View 案例分析 源码.rar

    **Android项目:ListView保持在列表顶部固定View案例分析及源码** 本资源提供了一个详细的Android项目案例,主要研究如何在ListView中实现一个固定在顶部的View。此案例源码完整,逻辑清晰,可二次开发定制,满足您...

    Android开发艺术探索

    10.1 Android的消息机制概述 / 373 10.2 Android的消息机制分析 / 375 10.2.1 Thread Local的工作原理 / 375 10.2.2 消息队列的工作原理 / 380 10.2.3 Looper的工作原理 / 383 10.2.4 Handler的工作原理 ...

    android面试题集锦(珍藏)

    (1):事件分发机制概述  首先应该搞清楚两个问题:事件分发机制分发的是什么?怎么进行分发?  分发的是MotionEvent事件了,因而我们讨论的问题就成了当MotionEvent事件生成之后,事件是怎么传递到某一个View控件...

    Android自定义View仿腾讯TIM下拉刷新View

    自定义 View 是 Android 开发里面的一个大学问。偶然间看到 TIM 邮箱界面的刷新 View 还挺好玩的,于是就自己动手实现了一个,先看看 TIM 里边的效果图: 二 需求分析 看到上面的动图,大概也知道我们需要实现的...

    Android开发案例驱动教程 配套代码

    第1章 Android操作系统概述 1 1.1 Android历史介绍 1 1.2 Android架构 1 1.3 Android平台介绍 2 1.4 现有智能手机操作系统比较 4 第2章 Android开发环境搭建 5 2.1 Eclipse和ADT插件 5 2.1.1 Eclipse安装 5 ...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    10.1 Android的消息机制概述 373 10.2 Android的消息机制分析 375 10.2.1 ThreadLocal的工作原理 375 10.2.2 消息队列的工作原理 380 10.2.3 Looper的工作原理 383 10.2.4 Handler的工作原理 385 10.3 主线程...

    Android应用开发详解pdf.pdf

     第一篇 基础篇第1章 Android概述Android概述,讲述了Android的前生后世、架构和特点、Android Market、应用程序组件和Android与Java ME的区别及联系  第2章 Android开发基础Android开发基础,讲述了Android开发...

    Android应用开发详解(PDF)

     第1章 Android概述  1.1 Android的前世今生  1.1.1 Android的产生  1.1.2 Android的发展  1.2 Android的平台架构及特性  1.2.1 Android平台特性  1.2.2 Android平台架构  1.3 Android Market  1.4...

    android-draggable-view:可在移动时修改的可拖动 Android View 的实现

    概述 在 Android 中实现可拖动/可移动视图的标准方法是依赖DragShadowBuilder 。 对于许多情况,这将是最简单的方法。 但是,在某些情况下,例如,您需要在拖动时修改视图,DragShadowBuilder 不会这样做,因为它...

    android群雄传

    7.1 Android View动画框架 163 7.1.1 透明度动画 163 7.1.2 旋转动画 163 7.1.3 位移动画 164 7.1.4 缩放动画 164 7.1.5 动画集合 164 7.2 Android属性动画分析 165 7.2.1 ObjectAnimator 166 7.2.2 ...

    android开发入门与实战(下)

    第17章 芝麻开门——Android底层开发和移植概述 17.1 Android原始码下载 17.2 实机测试 17.2.1 NeoFreeRunner介绍 17.2.2 烧录androidfs.jffs2 17.3 Android移植技术概论 17.3.1 Android底层技术的重要性 17.3.2 ...

    《Android应用开发揭秘》附带光盘代码.

     5.1.1 View类开发框架  5.1.2 SurfaceView类开发框架  5.2 Graphics类开发  5.5.1 Paint和Color类介绍  5.2.2 Canvas类介绍  5.2.3 几何图形绘制  5.2.4 字符串绘制  5.2.5 图像绘制  5.2.6 图像旋转  ...

    android开发艺术探索高清完整版PDF

    258 6.2.9 Clip Drawable / 260 6.3 自定义Drawable / 262 第7章 Android动画深入分析 / 265 7.1 View动画 / 265 7.1.1 View动画的种类 / 265 7.1.2 自定义View动画 / 270 7.1.3 帧动画 / 272 7.2 View动画的...

    Android应用开发揭秘pdf高清版

    5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像旋转 5.2.7 图像缩放 5.2.8 ...

Global site tag (gtag.js) - Google Analytics