自定义ViewGroup

定义一个自定义View组件,如果只是关注这个View的外观和大小,那么,要重写onDraw,onMeasure这两个方法。比如,我自定义了一个LabelView

自定义完View之后,该View就可以像TextView之类的在一个ViewGroup中被使用了。

ViewGroup中,会对存放在它其中的子View(childView)进行摆放。常见的ViewGroup有LinearLayout,RelativeLayout,FrameLayout。

那么,如果要实现一个自定义的ViewGroup呢?

实现自定义一个ViewGroup时,可以继承LinearLayout或者RelativeLayout等现有的ViewGroup。也可以直接继承类ViewGroup。

在实现自定义ViewGroup时,要重写onLayout。系统回调你自己实现的onLayout的目的,即执行其中实现布局的代码。

例如:系统会回调该方法,来执行该ViewGroup对其中的childView的布局。系统执行下述onLayout中的布局代码后,

达到的布局效果如下图:

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

// TODO Auto-generated method stub

int childCount = getChildCount() ;

int startLeft = 0 ;//设置每个子View的起始横坐标

int startTop = 10 ; //每个子View距离父视图的位置 , 简单设置为10px吧 。 可以理解为 android:margin=10px ;

Log. v(TAG, "------- onLayout start ") ;

for(int i=0 ;i<childCount ; i++){

View child = getChildAt(i) ;   //获得每个对象的引用

child.layout(startLeft, startTop, startLeft+child.getMeasuredWidth(), startTop+ child.getMeasuredHeight()) ;

startLeft =startLeft+ child.getMeasuredWidth() + 10;  //校准startLeft值,View之间的间距设为10px ;

Log. v(TAG, "------- onLayout startLeft " +startLeft) ;

}

}

参考资料:

public void layout (int l, int t, int r, int b)

Added in API level 1

Assign a size and position to a view and all of its descendants(子节点)

This is the second phase of the layout mechanism. (The first is measuring). In this phase, each parent calls layout on all of its children to position them. This is typically done using the child measurements that were stored in the measure pass().

Derived classes should not override this method. Derived classes with children should override onLayout. In that method, they should call layout on each of their children.

Parameters

l Left position, relative to parent

t Top position, relative to parent

r Right position, relative to parent

b Bottom position, relative to parent

http://blog.csdn.net/androiddevelop/article/details/8108970

http://blog.csdn.net/aaa2832/article/details/7849400

http://blog.csdn.net/aaa2832/article/details/7844904

时间: 2024-08-13 07:08:19

自定义ViewGroup的相关文章

自定义 ViewGroup 支持无限循环翻页之三(响应回调事件)

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处,再次感谢 ####################################################################### 自定义 ViewGroup 支持无限循环翻页系列 自定义 ViewGroup 支持无限循环翻页之一(重写 onLayout以及 dispatchDraw) 自定义 ViewGroup 支持无限循环翻页之二(处理触摸事件)

[Android] 自定义ViewGroup最佳入门实践

对自定义view还不是很了解的码友可以先看自定义View入门这篇文章,本文主要对自定义ViewGroup的过程的梳理,废话不多说. 1.View 绘制流程 ViewGroup也是继承于View,下面看看绘制过程中依次会调用哪些函数. 说明: measure()和onMeasure() 在View.Java源码中: public final void measure(int widthMeasureSpec,int heightMeasureSpec){ ... onMeasure ... } p

Android自定义Viewgroup切换View带有吸附效果

1.概述 先上效果图 大概就是这个效果,先说说实现思路 1.首先我们要拿到图片的url(网络)或id.路径(本地),将View与数据进行绑定,写我们自己的Adapter 2.自定义Viewgroup将要显示的view进行布局,以及处理触摸事件进行逻辑处理 3.写切换回调 2.实现 1)自定义Adapter 这里我下载的网络图片,同样可以将图片放到res下设置ImageView的内容 public class DragPageViewAdapter { private static final S

【自定义控件】自定义ViewGroup 在ViewGroup中显示TextView

需求:在ViewGroup中显示一个TextView 1.继承ViewGroup 必须要实现其构造方法和一个onLayout方法 构造函数的处理: public CusViewGroup(Context context) { this(context, null); } public CusViewGroup(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CusViewGroup(Context

Android 自定义ViewGroup,实现侧方位滑动菜单

侧方位滑动菜单 1.现在adnroid流行的应用当中很多都是用的侧方位滑动菜单如图: 将菜单显示在左边,内容页面显示在右边,通过滑动或则按钮点击来隐藏和显示菜单. 2.首先对ViewGroup进行个了解: View是ViewGroup的父类,ViewGroup具有View的所有特性,ViewGroup主要用用来充当View的容器,将其中的View作为自己孩子, 并对其进行管理,当然孩子也是可以是ViewGroup类型. View类一般用于绘图操作,重写他的onDraw方法,但它不可以包含其他组件

【Android 开发技巧】逼格提升指南 —— 如何自定义ViewGroup

本文由 孙国威 原创.如需转载,请注明出处! 这篇文章准备说说如何自定义ViewGroup.对于新手来说,自定义ViewGroup是那种大牛级别的人物才能掌握的东西,自己却望而生畏. 不要怕,请谨记"一切新事物都是纸老虎,只要肯去花时间钻研,没有学不会的东西". 废话不多说,接下来,就让我们来揭开自定义ViewGroup的神秘面纱. 依照惯例,先从一个例子说起. 很简单,3张扑克牌叠在一起显示.这个布局效果该如何实现呢?有的同学该说了,这很简单啊,用RelativeLayout或Fra

Android自定义ViewGroup(一)

之前写了两篇关于自定义view的文章,本篇讲讲自定义ViewGroup的实现. 我们知道ViewGroup就是View的容器类,我们经常用的LinearLayout,RelativeLayout等都是ViewGroup的子类.并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性,都是为用于告诉容器的),我们的宽度(layout_width).高度(layout_height).对齐方式(layout_gravity)等:于是乎,ViewGroup的职能为:给childView

Android自定义ViewGroup(一)——带箭头的圆角矩形菜单

今天要做一个带箭头的圆角矩形菜单,大概长下面这个样子: 要求顶上的箭头要对准菜单锚点,菜单项按压反色,菜单背景色和按压色可配置. 最简单的做法就是让UX给个三角形的图片往上一贴,但是转念一想这样是不是太low了点,而且不同分辨率也不太好适配,干脆自定义一个ViewGroup吧! 自定义ViewGroup其实很简单,基本都是按一定的套路来的. 一.定义一个attrs.xml 就是声明一下你的这个自定义View有哪些可配置的属性,将来使用的时候可以自由配置.这里声明了7个属性,分别是:箭头宽度.箭头

Android 自定义ViewGroup之实现FlowLayout-标签流容器

本篇文章讲的是Android 自定义ViewGroup之实现标签流式布局-FlowLayout,开发中我们会经常需要实现类似于热门标签等自动换行的流式布局的功能,网上也有很多这样的FlowLayout,但不影响我对其的学习.和往常一样,主要还是想总结一下自定义ViewGroup的开发过程以及一些需要注意的地方. 按照惯例,我们先来看看效果图 一.写代码之前,有几个是问题是我们先要弄清楚的: 1.什么是ViewGroup:从名字上来看,它可以被翻译为控件组,言外之意是ViewGroup内部包含了许