解析:继承ViewGroup后的子类如何重写onMeasure方法

1.首先贴上我试验成功的代码

复制代码 代码如下:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int measureWidth = MeasureSpec.getSize(widthMeasureSpec);

         int measureHeigth = MeasureSpec.getSize(heightMeasureSpec);

         setMeasuredDimension(measureWidth, measureHeigth);

         // TODO Auto-generated method stub

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

             View v = getChildAt(i);

             Log.v(TAG, "measureWidth is " +v.getMeasuredWidth() + "measureHeight is "+v.getMeasuredHeight());

             int widthSpec = 0;

             int heightSpec = 0;

             LayoutParams params = v.getLayoutParams();

             if(params.width > 0){

                 widthSpec = MeasureSpec.makeMeasureSpec(params.width, MeasureSpec.EXACTLY);

             }else if (params.width == -1) {

                 widthSpec = MeasureSpec.makeMeasureSpec(measureWidth, MeasureSpec.EXACTLY);

             } else if (params.width == -2) {

                 widthSpec = MeasureSpec.makeMeasureSpec(measureWidth, MeasureSpec.AT_MOST);

             }

if(params.height > 0){

                 heightSpec = MeasureSpec.makeMeasureSpec(params.height, MeasureSpec.EXACTLY);

             }else if (params.height == -1) {

                 heightSpec = MeasureSpec.makeMeasureSpec(measureHeigth, MeasureSpec.EXACTLY);

             } else if (params.height == -2) {

                 heightSpec = MeasureSpec.makeMeasureSpec(measureWidth, MeasureSpec.AT_MOST);

             }

             v.measure(widthSpec, heightSpec);

}

     }

解释一下:

首先判断params.width的值是多少,有三种情况。

如果是大于零的话,及传递的就是一个具体的值,那么,构造MeasupreSpec的时候可以直接用EXACTLY。

如果为-1的话,就是MatchParent的情况,那么,获得父View的宽度,再用EXACTLY来构造MeasureSpec。

如果为-2的话,就是wrapContent的情况,那么,构造MeasureSpec的话直接用一个负数就可以了。

时间: 2024-09-08 23:16:17

解析:继承ViewGroup后的子类如何重写onMeasure方法的相关文章

解析:继承ViewGroup后的子类如何重写onMeasure方法_Android

1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {          int measureWidth = MeasureSpec.getSize(widthMeasureSpec);          int measureHeigth = MeasureSpec.getSize(heightMeasureSpec);          setMeas

继承ViewGroup重写onMeasure方法的详解

我们继承重写ViewGroup的目的是要做自定义控件,所以我们有必要先看一下安卓View的绘制过程: 首先当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree,绘画通过遍历整个树来完成,不可见的区域的View被放弃. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍

struts2 0-action继承ActionSupport后action不能访问特定的方法是为什么

问题描述 action继承ActionSupport后action不能访问特定的方法是为什么 表单的action为: <form action="login.action"></form> struts2.xml的配置为: <action name="login" class="loginAction" method="userLogin"> <result name="ok

Python实现子类调用父类的方法_python

本文实例讲述了Python实现子类调用父类的方法.分享给大家供大家参考.具体实现方法如下: python和其他面向对象语言类似,每个类可以拥有一个或者多个父类,它们从父类那里继承了属性和方法.如果一个方法在子类的实例中被调用,或者一个属性在子类的实例中被访问,但是该方法或属性在子类中并不存在,那么就会自动的去其父类中进行查找. 继承父类后,就能调用父类方法和访问父类属性,而要完成整个集成过程,子类是需要调用的构造函数的. 子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题

PHP中子类重载父类的方法【parent::方法名】_php实例

在PHP中不能定义重名的函数,也包括不能再同一个类中定义重名的方法,所以也就没有方法重载.单在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法重写. 子类中重载父类的方法就是在子类中覆盖从父类中继承过来的方法,父类中的方法被子类继承过来不就可以直接使用吗?为什么还要重载呢?因为有一些情况我们必须要覆盖的.例如,有一个"鸟"类,在这个类中定义了鸟的通用方法"飞翔".将"鸵鸟"类作为它的子类,

子类继承HibernateDaoSupport后如何注入SessionFactory

子类继承HibernateDaoSupport后,由于HibernateDaoSupport,setSessionFactory是使用final修飾的,無法重寫,沒有辦法使用註解的方式注入sessionFactroy public final void setSessionFactory(SessionFactory sessionFactory) {         if (this.hibernateTemplate == null || sessionFactory != this.hib

java 继承 多态-请问下这段代码正确的原因,为什么父类可以调用抽象方法,执行的是子类重写的方法

问题描述 请问下这段代码正确的原因,为什么父类可以调用抽象方法,执行的是子类重写的方法 public class TestA { public static void main(String[] args) { TestA a = new TestA(); a.start(); } public void start(){ B b = new B(); b.funA(); } public abstract class A { public void funA(){ System.out.pri

Java中继承、多态、重载和重写介绍_java

什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型.继承是面向对象的三个基本特征--封装.继承.多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类.超类),如果

继承ViewGroup研究(汇总) 一、二、三

转载过来:为一.二.三版本. 仅供参考: 继承ViewGroup研究(1) --简介和一个小Demo 又翻开一个新篇章了,哈哈,上一回学习的是继承View,关于继承View个人感觉不是那么完美,做技术的总是想让一切完美,但世界上本就没有完美,由他吧.这回研究的是ViewGroup.说实话,个人感觉这个类的功能还是很强大的,这里我们只给出最基本的东西,好了,继续开始研究吧,,路漫漫其修远兮,吾将上下而求索.   一.ViewGroup概述   研究ViewGroup之前,我们先来看看ViewGro