毕设应用中需要添加一个滑动按钮,在网上看了几个Demo之后决定自定义ViewGroup来实现。

这里是对实现过程中自定义ViewGroup的方法总结。

关于ViewGroup,文档给出的描述是:

A ViewGroup is a special view that can contain other views (called children.) The view group is the base class for layouts and views containers.

ViewGroup是一种可以包含其他视图的特殊视图,是布局和其他视图容器的基类。

正因为ViewGroup可以包含多个视图,所以在实现滑动按钮时可以使用它(一个主视图,一个按钮视图)。

以自定义ViewGroup的名称创建一个类,继承ViewGroup

[java] view plaincopy
  1. public class SlidingMenuView extends ViewGroup {
  2. public SlidingMenuView(Context context, AttributeSet attrs) {
  3. super(context, attrs);
  4. // TODO Auto-generated constructor stub
  5. }
  6. @Override
  7. protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
  8. // TODO Auto-generated method stub
  9. }
  10. }

继承ViewGroup之后,eclipse提示需要生成自定义ViewGroup的构造方法和onLayout方法。

onLayout方法是ViewGroup中的抽象方法,因此继承ViewGroup之后一定要实现该方法。

Called from layout when this view should assign a size and position to each of its children. Derived classes with children should override this method and call layout on each of their children.
Parameters:
changed
This is a new size or position for this view
l
Left position, relative to parent
t
Top position, relative to parent
r
Right position, relative to parent
b
Bottom position, relative to parent

ViewGroup中的onLayout方法将在ViewGroup为它的孩子们分配尺寸和位置的时候被调用,在这个类的实现中,需要调用每一个控件的布局方法为其布局。

注意:onLayout在View中是一个public的方法,在ViewGroup为protected类型,并且为abstract,由于这个方法在ViewGroup中没有实现,因此ViewGroup本身不可以直接使用。

创建布局文件myalbumlistwithmuen,使用MyViewGroup作为控件:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <com.album.view.SlidingMenuView
  7. android:id="@+id/myviewgroup"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent" >
  10. </com.album.view.SlidingMenuView>
  11. </LinearLayout>

创建如图两个子视图:主页面myalbumlist、按钮页面slidingmenu:

     

创建Activity,使用myalbumlistwithmuen作为其布局:

[java] view plaincopy
  1. public class MyAlbumListActivity extends Activity {
  2. private MyViewGroup myViewGroup;
  3. private LayoutInflater layoutInflater;
  4. private View slidingmenu, myalbumlist;
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.myalbumlistwithmuen);
  9. initView();
  10. }
  11. private void initView(){
  12. myViewGroup=(MyViewGroup)findViewById(R.id.myviewgroup);
  13. layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  14. slidingmenu = layoutInflater.inflate(R.layout.slidingmenu, null);
  15. myalbumlist=layoutInflater.inflate(R.layout.myalbumlist, null);
  16. myViewGroup.addView(slidingmenu);  //添加滑动菜单的view
  17. myViewGroup.addView(myalbumlist);   //添加主页面的view
  18. }
  19. }

上面代码中,已经将滑动菜单视图和主页面视图放入在自定义的ViewGroup当中。自定义的ViewGroup需要为这两个孩子分配尺寸和位置,故需重写onLayout方法

[java] view plaincopy
  1. @Override
  2. protected void onLayout(boolean changed, int l, int t, int r, int b) {
  3. if (changed) {
  4. slidingmenu = getChildAt(0);// 获取滑动菜单的view
  5. myalbumlist = getChildAt(1);// 获得主页view
  6. // 相当于fill_parent
  7. myalbumlist.measure(0, 0);
  8. myalbumlist.layout(0, 0, getWidth(), getHeight());
  9. }
  10. }

Android学习:自定义ViewGroup方法总结相关推荐

  1. Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法

    Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法 今天修改一个比较奇怪的bug: 在操作一个事件的时候,使用eventbus来监听事件,断点发现有时候是会执 ...

  2. Android之自定义ViewGroup

    概述 在写代码之前,我必须得问几个问题: 1.ViewGroup的职责是啥? ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性, ...

  3. Android开发 自定义ViewGroup 实现微信九格图功能(图片不同排布不同) 和 一种图片点击变暗效果

    一.图片点击变暗效果 1.继承Imageview 2.重写OnDraw方法:判断室友点击(isPressed)如果为true则canvas.drawColor(0xARGB),经常测试如果不写透明度 ...

  4. Android 中自定义ViewGroup实现流式布局的效果

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,

  5. android computescroll_Android问题:自定义ViewGroup,重载computeScroll()方法有什么用?...

    展开全部 为了易于控制滑屏控制,Android框架提供了 computeScroll()方法去控制这个流程.e69da5e887aa62616964757a686964616f313333353461 ...

  6. android 自定义图片容器,Android应用开发中自定义ViewGroup视图容器的教程

    一.概述在写代码之前,我必须得问几个问题: 1.ViewGroup的职责是啥?ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性, ...

  7. Android 手把手教您自定义ViewGroup

    最近由于工作的变动,导致的博客的更新计划有点被打乱,希望可以尽快脉动回来~ 今天给大家带来一篇自定义ViewGroup的教程,说白了,就是教大家如何自定义ViewGroup,如果你对自定义ViewGr ...

  8. android 自定义flowlayout,Android 自定义ViewGroup之实现FlowLayout-标签流容器

    本篇文章讲的是Android 自定义ViewGroup之实现标签流式布局-FlowLayout,开发中我们会经常需要实现类似于热门标签等自动换行的流式布局的功能,网上也有很多这样的FlowLayout ...

  9. Android自定义文件路径箭头,Android自定义ViewGroup实现带箭头的圆角矩形菜单

    本文和大家一起做一个带箭头的圆角矩形菜单,大概长下面这个样子: 要求顶上的箭头要对准菜单锚点,菜单项按压反色,菜单背景色和按压色可配置. 最简单的做法就是让UX给个三角形的图片往上一贴,但是转念一想这 ...

最新文章

  1. HttpWebRequest采集读取网站挂载Cookie的通用方法
  2. 在SAP BW中使用ABAP
  3. 001_支持并发的两次判空懒汉单例
  4. Makedown 本地图片问题
  5. 来和 webpack 谈场恋爱吧!这课程好甜!
  6. centos6.5下如何把python2.6.6升级到2.7
  7. 一个在线文本比较工具
  8. 【4K录屏】高清录屏及剪辑软件:Bandicam 和 Captura
  9. 【批量身份证图片识别】如何批量OCR识别身份证图片或复印件并导出至excel表格或文本格式,下面教你方法
  10. 27种主流编程语言分类及优劣
  11. 数据挖掘算法和实践(三):朴素贝叶斯(mushrooms蘑菇数据集)
  12. 云原生数据库-Amazon RDS
  13. Ant Design 实现表格合并
  14. 艾永亮:B站破壁出圈,同是弹幕视频网站,为什么倒下的是A站?
  15. Node.js中的npm与包
  16. 脚踏实地《数据结构第二章》第五节:循环链表
  17. 【论文阅读】TomoAlign: A novel approach to correcting sample motion and 3D CTF in CryoET
  18. 微服务SpringCloud的平台架构及原理分析
  19. 华为ospf模拟器命令笔记(1)
  20. 股票开户须知,天津证券公司线上开户佣金一般是多少?

热门文章

  1. 【设计模式】访问者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  2. 【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )
  3. 【计算机网络】数据链路层 : 广域网 ( HDLC 协议 | HDLC 站 | HDLC 帧格式 | HDLC 帧类型 | PPP 协议 与 HDLC 协议 对比 )
  4. 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )
  5. 【Android 应用开发】Android - TabHost 选项卡功能用法详解
  6. 会声会影x7 每次安装均会提示:已安装这个产品的另一个版本
  7. Action中五个常量解释,(success,error,input,login,none)
  8. iOS开发-登录界面开发(6)Toast-Swift的使用-Swfit4.1_Xcode9.3.1
  9. PPT资料下载 - 问题驱动的软件测试设计:强化测试用例设计
  10. 如何使用HTML5,CSS3和PHP创建一个联系表格