2013-12-18 10:56:28 转载自http://blog.sina.com.cn/s/blog_61fbf8d10100zzoy.html View在屏幕上显示出来要先经过measure(计算)和layout(布局).1. 什么时候调用onMeasure()方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数--widthMeasureSpec和heightMeasureSpec.这两个参数指明控件可获得的空间以及关于这个空…
转自:http://blog.sina.com.cn/s/blog_61fbf8d10100zzoy.html Android View.onMeasure方法的理解 View在屏幕上显示出来要先经过measure(计算)和layout(布局).1.什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec.这两个参数指明控件可获得的空间以及…
一下内容转载自http://blog.sina.com.cn/s/blog_61fbf8d10100zzoy.html View在屏幕上显示出来要先经过measure(计算)和layout(布局).1.什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec.这两个参数指明控件可获得的空间以及关于这个空间描述的元数据.更好的方法是你传递Vi…
View在屏幕上显示出来要先经过measure(计算)和layout(布局).1.什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec.这两个参数指明控件可获得的空间以及关于这个空间描述的元数据.更好的方法是你传递View的高度和宽度到setMeasuredDimension方法里,这样可以直接告诉父控件,需要多大地方放置子控件. 接下…
View在屏幕上显示出来要先经过measure(计算)和layout(布局). 1.什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec. 这两个参数指明控件可获得的空间以及关于这个空间描述的元数据. 更好的方法是你传递View的高度和宽度到setMeasuredDimension方法里,这样可以直接告诉父控件,需要多大地方放置子控件.…
在Android开发中,当Android原生控件不能满足我们的需求的时候,就需要自定义View.View在屏幕上绘制出来先要经过measure(计算)和layout(布局). 什么时候调用onMeasure方法?当子View的父控件要放置该View的时候,父控件会传递两个参数给View——widthMeasureSpec和heightMeasureSpec.这两个参数是View可以获取的宽高尺寸和模式值混合的int数据.可以通过int mode = MeasureSpec.getMode(wid…
1.自定义控件首先定义一个类继承View 有时,Android系统控件无法满足我们的需求,因此有必要自定义View.具体方法参见官方开发文档:http://developer.android.com/guide/topics/ui/custom-components.html 一般来说,自定义控件都会去重写View的onMeasure方法,因为该方法指定该控件在屏幕上的大小. protected void onMeasure (int widthMeasureSpec, int heightMe…
写这篇博客的缘由.近期因为项目中用到相似一个LinearLayout中水平布局中,有一个TextView和Button,然后对该LinearLayout布局设置点击事件.点击TextView能够触发该点击事件.然而奇怪的是点击Button却不能触发. 然后google到了解决的方法(重写Button,然后重写当中的ontouchEvent方法,且返回值为false).可是不知道原因,这两天看了几位大神的博客,然后自己总结下. public class MyButton extends Butto…
解析View.post方法.分析一下这个方法的流程. 说起post方法,我们很容易联想到Handler的post方法,都是接收一个Runnable对象.那么这两个方法有啥不同呢? Handler的post方法 先来简单看一下Handler的post(Runnable)方法.这个方法是将一个Runnable加到消息队列中,并且会在这个handler关联的线程里执行. 下面是关联的部分源码.可以看到传入的Runnable对象,装入Message后,被添加进了queue队列中. Handler 有关的…
前言 上一篇文章,笔者主要讲述了DecorView以及ViewRootImpl相关的作用,这里回顾一下上一章所说的内容:DecorView是视图的顶级View,我们添加的布局文件是它的一个子布局,而ViewRootImpl则负责渲染视图,它调用了一个performTraveals方法使得ViewTree开始三大工作流程,然后使得View展现在我们面前.本篇文章主要内容是:详细讲述View的测量(Measure)流程,主要以源码的形式呈现,源码均取自Android API 21. 从ViewRoo…
前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: http://blog.csdn.net/a396901990/article/details/36475213?utm_source=tuicool&utm_medium=referral onMeasure 作用 (1)一般情况重写onMeasure()方法作用是为了自定义View尺寸的规则,如果你的自…
Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea…
Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点…
做android其实也有一段时间了,我们每个人都会碰到一些这样或那样的问题,碰到问题了就拼命百度,可是发现,我们解决问题的能力并没有提升很多,所以我才有想总结一下我项目中所用过的相关知识,并了解一下Android源代码中是如何定义这些属性的,如何去实现的.以后再碰到类似的问题,我该如何实现.本人也不常写博客,希望各位博友能指点,分享,并提出博客中不正确的地方,共勉!    首先我发一份我做的关于Android View深入实现的的XMind的思维导图,可以帮助我一起整理思路,若是博友有什么想到的…
在Android开发中,很多人对自定义View是望而生畏,但这又是向高级进阶的必经之路,主要是对View里面的很多方法不知道怎么理解,其中一个就是onMeasure()方法. 首先,我自定义一个MyView,继承于View,onMeasure()方法不做处理,直接调用super.onMeasure(widthMeasureSpec, heightMeasureSpec); public class MyView extends View{ public MyView(Context contex…
最近在写程序中,遇到了之前自己没遇到过的代码,一番理解后才知道原来是在动态设定xml布局中的属性.即利用LayoutParams可以动态的设定布局或者控件的宽和高,以及的它的左间距,右间距,内间距,和gravity等.总之,我们在xml中可以设定的东西,用代码都是可以搞定的.每一种布局都会对应自己的LayoutParams.于是我也做了下面的实验,算是一个参考范例吧.顺便熟悉一下这方面的知识. 一.线性布局的动态设定属性值 一如往常,我们新建一个android项目,姑且叫做“View实验”.新建…
练习写一个自定义的view,代码是抄网上的,第一次写,没有问题,与网上的示例一样的效果, 第二次.第三次,都出现问题,但是解决了. 昨天进行第四次写再写,又出问题不一样的问题了. 首先是想加一个子包,结果在app上目录直接创建子包全名,结果子包级别与父包同级目录了.但是在父包上直接加子包名,子包目录可以在父包目录下了. 其次遇到了,自定义view老是显示不出来,经过仔细对比,发现是在重写onMeasure中 后是调用 super.onMeasure(width,height); super.on…
今天的任务就是详细研究一下protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法.如果只是说要重写什么方法有什么用的话,还是不太清楚.先去源码中看看为什么要重写onMeasure()方法,这个方法是在哪里调用的: 一.源码中的measure/onMeasure方法: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {…
PS:居然三天没写博客了...今天补上...东西虽多,但是都是一些基础...代码多了一些,有人可能会这样问,粘这么多代码有毛用..其实对于一个Android的初学者来说,一个完整的代码是最容易帮助理解的...我也是在一点一点的去学习...看了许多人的博客,大部分都是粘贴部分代码,说实话,刚接触的时候真的感觉不是很好理解...不知道其他地方如何去实现..只能自己慢慢的去摸索..我写的这东西也不是给大神们去看的...大神一看就能明白怎么回事..因此我是站在初学者的立场上,才贴了这么多的代码...好了…
Android view中的requestLayout和invalidate方法 requestLayout:当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent view重新调用他的onMeasure onLayout来对重新设置自己位置. 特别的当view的layoutparameter发生改变,并且它的值还没能应用到view上,这时候适合调用这个方法. invalidate:View本身调用迫使view重画…
一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求.一个MeasureSpec由大小和模式组成.它有三种模式:UNSPECIFIED(未指定),父元素不对子元素施加任何束缚,子元素可以得到任意想要的大小:EXACTLY(完全),父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小:AT_MOST(至多),子元素至多达到指定大小的值. 它常用的三个函数: 1.static int getMode(int measu…
作为自定义 view 的基础,如果不了解Android  view 的生命周期 , 那么你将会在后期的维护中发现这样那样的问题 ....... 做过一段时间android 开发的同学都知道,一般 onXXX 函数都是系统的回调函数.而这篇 blog 也是基于这个思想(或许有点笨)...... 首先来看三分  创建view 的 日志信息 (自定义View 配置到xml文件中): android:visibility=gone 03-25 19:56:55.934: D/yyyyy(11493): …
对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 为了让JAVA初学者能更好的理解这两个方法的使用和意义,今天笔者来谈一下自己对这两个方法的理解,如果你对于这两个方法还有困惑甚至完全不知道这两个方法是做什么的,那你看下面这篇文章很有用.如果你对于set和get这两个方法已经很熟悉了,那么你完全不用看这篇文章.这篇文章是写给初学者的. 我们先来看看set和get这两个词的表面意思,set是设置的意思,而get是获…
Android View各种尺寸位置相关的方法探究 本来想做一个View间的碰撞检测之类的. 动手做了才发现不是想象的那么简单. 首先,写好了碰撞检测的工具类如下: package com.mengdd.utils; import android.graphics.Rect; import android.graphics.RectF; import android.util.Log; import android.view.View; public class Collision2DUtils…
onMeasure方法在控件的父元素正要放置它的子控件时调用.它会问一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec. 它们指明控件可获得的空间以及关于这个空间描述的元数据. 比返回一个结果要好的方法是你传递View的高度和宽度到setMeasuredDimension方法里.   接下来的代码片段给出了如何重写onMeasure.注意,调用的本地空方法是来计算高度和宽度的.它们会译解widthHeightSpec和he…
android view的setVisibility方法值的意思 有三个值 visibility  One of VISIBLE, INVISIBLE, or GONE. 常量值为0,意思是可见的 常量值为4,意思是不可见的 常量值为8,意思是不可见的,而且不占用布局空间 // 设置显示 tv_main_title.setVisibility(View.VISIBLE); // 设置不显示也不占用空间 tv_main_title.setVisibility(View.GONE); // 设置不显…
在Android开 发中,在Activity中关联视图View是一般使用setContentView方法,该方法一种参数是使用XML资源直接创 建:setContentView (int layoutResID),指定layout中的一个XML的ID即可,这种方法简单.另一个方法是 setContentView(android.view.View),参数是指定一个视图View对象,这种方法可以使用自定义的视图类. 在一些场合中,需要对View进行一些定制处理,比如获取到Canvas进行图像绘制,…
android 修改listview item view 的方法   具体的解答办法很简单: 代码如下 : 1.获取需要更新的view int visiblePosition = mListView.getFirstVisiblePosition(); View view = mListView.getChildAt(position - visiblePosition); mListView.getAdapter().getView(position, view, mListView); 2.…
最近使用hellocharts需要表格横向显示,而activity需要竖屏显示,在旋转以后,默认宽度为不超过屏幕宽度,则一直无法显示全控件. 此时需要修改onMeasure方法,这个方法是用来控制控件宽度的 参考文档http://blog.csdn.net/u012604322/article/details/17093421 MeasureSpec.EXACTLY:父视图希望子视图的大小应该是specSize中指定的. MeasureSpec.AT_MOST:子视图的大小最多是specSize…
写得太好了,本来还想自己写的,奈何肚里墨水有限,直接转吧.正所谓前人种树,后人乘凉.. View的绘制和事件处理是两个重要的主题,上一篇<图解 Android事件分发机制>已经把事件的分发机制讲得比较详细了,这一篇是针对View的绘制,View的绘制如果你有所了解,基本分为measure.layout.draw 过程,其中比较难理解就是measure过程,所以本篇文章大幅笔地分析measure过程,相对讲得比较详细,文章也比较长,如果你对View的绘制还不是很懂,对measure过程掌握得不是…