浅谈Android自定义View

0. 前言本文将对自定义View的原理和方法进行简要讲解,通过此文,你将学到:安卓的View架构View的绘图机制自定义View的方法步骤 1. View控件的架构1.1 View和ViewGroupAndroid中,控件大致可以分为两大类:View控件ViewGroup控件它们都会在界面中占得一块矩形区域。View控件是单个的视图控件,是一个独立的最小个体,View控件之间互不相容,比
摘要由CSDN通过智能技术生成

0. 前言

本文将对自定义View的原理和方法进行简要讲解,通过此文,你将学到:

  • 安卓的View架构
  • View的绘图机制
  • 自定义View的方法步骤

1. View控件的架构

1.1 View和ViewGroup

Android中,控件大致可以分为两大类:

  • View控件
  • ViewGroup控件

它们都会在界面中占得一块矩形区域。View控件是单个的视图控件,是一个独立的最小个体,View控件之间互不相容,比如系统的Button、TextView等控件;ViewGroup控件便是包容View控件的容器,比如系统的LinearLayout、FrameLayout、以及安卓5.0后增加的基于FrameLayout的CardView等。

请注意,这里说的是View控件而不是说安卓源码中的View类,因为在源码中,ViewGroup其实是继承自View的,View在源码中的类继承关系如图所示:
View继承关系

1.2 View树

由于ViewGroup和View之间存在缠绵的包容关系,便有了View树这一说法,什么是View树呢,其实就是View容器和View构成多层次视图所形成的树形结构,也就是树根是ViewParent,其子为ViewGroup,ViewGroup又可以有View和ViewGroup子树。安卓界面的View树如图所示:

View树

每个Activity都包含一个Window对象,在Android中Window对象通常由PhoneWindow来实现。PhoneWindow将一个DecorView设置为整个应用窗口的根View。DecorView作为窗口界面的顶层视图,封装了一些窗口操作的通用方法。可以说,DecorView将要显示的具体内容呈现在了PhoneWindow上,这里面的所有View的监听事件,都通过WindowManagerService来进行接收,并通过Activity对象来回调相应的onClickListener。在显示上,它将屏幕分成两部分,一个是TitleView,另一个是ContentView。看到这里,大家一定看见了一个非常熟悉的布局——ContentView。它是一个ID为content的Framelayout,activity_main.xml就是设置在这样一个Framelayout里。

通过上述结构便可以推导出,如过用户通过调用requestWindowFeature(…)来设置窗口的属性,那么必须在setContentView(…)之前调用才能生效,因为Window是在ContentView之前绘制的。

2. 自定义View

通常情况下,有以下三种方法来实现自定义View:

  • 对现有控件进行扩展
  • 通过组合来实现新的控件
  • 完全重写View来实现全新控件

2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值