首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在onCreate中获取View的高度和宽度

如何在onCreate中获取View的高度和宽度 在开发过程中经常需要获取到View的宽和高,可以通过View.getWidth()和View.getHeight()来得到宽高。...只有经过“测量”和“布局”之后,View才能正确地完成绘制。而这一切是发生在onCreate方法之后的。...所以在onCreate中直接使用View.getWidth()和View.getHeight()是无法得到正确的值的。 那应该怎么onCreate中获取View的宽高呢?...开发者可以通过View.post()方法来获取到View的宽高,该方法传递一个Runnable参数,然后将其添加到消息队列中,最后在UI线程中执行。...View.getWidth()和View.getHeight()方法可以得到正确的值 Log.d(TAG,"view.width="+view.getWidth()+",view.height

5.3K20

手把手教你读懂源码,View的绘制流程详细剖析

接着再将前面得到的宽度maxWidth和高度maxHeight分别加上当前视图所设置的Padding值,得到的宽度maxWidth和高度maxHeight还不是最终的宽度和高度,还需要考虑以下两个因素:...当前视图是否设置有最小宽度和高度。如果设置有的话,并且它们比前面计算得到的宽度maxWidth和高度maxHeight还要大,那么就将它们作为当前视图的宽度和高度值。 2. 当前视图是否设置有前景图。...如果设置有的话,并且它们比前面计算得到的宽度maxWidth和高度maxHeight还要大,那么就将它们作为当前视图的宽度和高度值。...计算的根据是在xml文件或者代码中设置的宽度和高度的参数,参数指明了要求你是填充父控件(match_parent)还是包裹内容(wrap_content)还是精确的一个大小,但最终你的大小不应该超过父控件给你提供的空间...因此在自定义View的时候都一般都需要重写父类的onDraw方法来实现View内容绘制。 简单总结概括一下,draw的时序图如下: ?

1.3K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从0开始学自定义View -1

    初识View 在安卓中所有的样式都可以说是一个视图,TextView,Button,ImageView...这些官方已经给出的view已经无法满足我们的日常生活所需了,这个时候,我们就可以自定义View...自定义View实战 自定义View如何做,怎么做,往往都是第一步比较难,之后对View美化就相对来说比较简单了。...onDraw绘制View 这个方法就厉害了,所有的绘制工作都是里面的canvas去完成,canvas翻译过来是帆布的意思,对我们来说就是画布,画布有了,还差画笔,有笔有布有多彩墨水才能画出大好河山嘛,这里先介绍画笔...float getStrokeWidth() 返回描边的宽度。 void setStrokeWidth(float width) 设置线条宽度。...Paint.Cap getStrokeCap() 返回paint的Cap,控制如何处理描边线和路径的开始和结束。 void setStrokeCap(Paint.Cap cap) 设置线帽。

    92730

    Android查缺补漏(View篇)--自定义 View 的基本流程

    在自定义 View 时我们也正是在 onDraw() 方法内可以在 Canvas 画布上随心所欲的画出我们想要的 View。...其实在自定义 View 过程中,难点往往不是怎么使用画笔本身,而是绘制出预期效果的思路,例如:你想通过自定义 View 来做一个折线图控件,传入一组数据怎么确定这些数据在画布上对应点的相对坐标,而确定点的坐标就需要通过相关的数学公式来计算了...新建一个继承 View 的类,添加构造方法,设置 Paint 画笔,重写 onDraw() 方法,先在画布上以最简单的方式话一个半径为100的圆。...同时为自定义 View 设置 padding 对于一个控件,有 margin 和 padding,margin 是外间距,属于控件之外的范围,在自定义 View 时不需要对 margin 做特殊处理。...可见,在 onDraw() 方法对padding处理之后,在布局文件中无论怎么设置padding,都能保证圆心在可用区域的中心。

    858100

    图像处理程序框架—MFC相关知识点

    就像画家绘画一样,设备环境好比是画家的画布,图形对象好比是画家的画笔。用画笔在画布上绘画,不同的画笔将画出不同的画来。选择合适的图形对象和绘图对象,才能按照要求完成绘图任务。...lpRect为RECT结构或CRect对象,point中的x、y为画圆角的椭圆的逻辑宽度和高度 返回值:若成功,返回非0;否则返回0 CDC::SaveDC 保存设备环境的当前状态  virtual...为新背景色 返回值:先前背景色;若错误,返回值为0x80000000 CDC::GetTextExtent 使用当前字体计算一行文本的宽度和高度  CSize GetTextExtent(LPCTSTR...框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。...至于CPaintDC和CClientDC根本是两回事情 CPaintDC是一个设备环境类,在OnPaint中作为参数传递给OnPrepareDC来作设备环境的设置。

    1.5K20

    Android开发笔记(一百五十三)OpenGL绘制三维图形的流程

    而TextView和ImageView都继承自基本视图View,这意味着首先要有一个专门的绘图场所,比如现实生活中的黑板、画板和桌子。...然后还要有绘画作品的载体,比如显示生活中黑板的漆面,以及用于国画的宣纸、用于油画的油布等等,在Android系统中,这个绘画载体便是画布Canvas。...正如前面介绍的Android自定义控件那样,有了视图View、画布Canvas、画笔Paint,方能绘制炫彩多姿的各种控件。...; 2、重写onMeasure函数,可在此测量控件的宽度和高度; 3、重写onLayout函数,可在此挪动控件的位置; 4、重写onDraw函数,可在此绘制控件的形状、颜色、文字以及图案等等; 于是前面提到...和onLayout两个函数的功能; 3、onDrawFrame顾名思义跟自定义控件的onDraw函数差不多,onDraw函数用于绘制二维图形的具体形状,而onDrawFrame函数用于绘制三维图形的具体形状

    2K20

    Android高频面试专题 - 提升篇(二)View绘制流程

    六个步骤:①、绘制视图的背景;②、保存画布的图层(Layer);③、绘制View的内容;④、绘制View子视图,如果没有就不用;⑤、还原图层(Layer);⑥、绘制滚动条。...并不一定决定了子View的大小,自定义View可以根据需要修改这个值,最终通过setMeasuredDimension(width,height)设置最终大小。...的宽度和高度 View.post(runnable) view.post(new Runnable() { @Override public...区别 二者都会出发刷新View,并且当这个View的可见性为VISIBLE的时候,View的onDraw()方法将会被调用,invalidate()方法在 UI 线程中调用,重绘当前 UI。...当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent view(父类的视图)重新调用他的onMeasure、onLayout来重新设置自己位置。

    9.6K31

    教你玩转 Android RecyclerView:深入解析 RecyclerView.ItemDecoration类(含实例讲解)

    () // 作用:在子视图上设置绘制范围,并绘制内容 // 类似平时自定义View时写onDraw()一样 // 绘制图层在ItemView以下,所以如果绘制区域与ItemView...作用 通过 Canvas 对象绘制内容 2.2.2 具体使用 使用方法类似自定义View时的onDraw() 请看我写的自定义View文章:自定义View Draw过程- 最易懂的自定义View...= 10 px 设置好onDraw()可绘制的区域 通过onDraw()绘制一个高度 = 10px的矩形(填充颜色=红色) ?...(分割线)的宽度为10px final int mDivider = 10; // 根据子视图的位置 & 间隔区域,设置矩形(分割线)的2个顶点坐标(左上...2.3.2 具体使用 使用方法类似自定义View时的onDraw() 请看我写的自定义View文章:自定义View Draw过程- 最易懂的自定义View原理系列(4) @Override

    2K21

    Carson带你学Android:自定义View Canvas类使用教程

    前言 自定义View是Android开发者必须了解的基础;而Canvas类的使用在自定义View绘制中发挥着非常重要的作用 网上有大量关于自定义View中Canvas类的文章,但存在一些问题:内容不全...、思路不清晰、简单问题复杂化等等 今天,我将全面总结自定义View中的Canvas类的使用,我能保证这是市面上的最全面、最清晰、最易懂 目录 1....mPaint); 与矩形相比,圆角矩形多了两个参数rx 和 ry 圆角矩形的角是椭圆的圆弧,rx 和 ry实际上是椭圆的两个半径,如下图: 特别注意:当 rx大于宽度的一半, ry大于高度一半 时,...画出来的为椭圆 实际上,在rx为宽度的一半,ry为高度的一半时,刚好是一个椭圆;但由于当rx大于宽度一半,ry大于高度一半时,无法计算出圆弧,所以drawRoundRect对大于该数值的参数进行了修正...画布快照 这里先理清几个概念 画布状态:当前画布经过的一系列操作 状态栈:存放画布状态和图层的栈(后进先出) 画布的构成:由多个图层构成,如下图 在画布上操作 = 在图层上操作 如无设置,绘制操作和画布操作是默认在默认图层上进行

    2.4K10

    Android 自定义View小结(重于理解,不作为教程)

    平时我们经常使用layout_width和layout_height来设置View的大小,并且一直都能正常工作,就好像这两个属性确实是用于设置View的大小的。...而实际上则不然,它们其实是用于设置View在布局中的大小的,也就是说,首先View必须存在于一个布局中,之后如果将layout_width设置成match_parent表示让View的宽度填充满布局,如果设置成...wrap_content表示让View的宽度刚好可以包含其内容,如果设置成具体的数值则View的宽度会变成相应的数值。...()和onDraw(),下面我们就逐个对这三个阶段展开探讨, 1.1 onMeasure() Measure(测量) Measure是测量的意思, 在代码中也是来测量控件的大小,其onMeasure(int...绘制的方式主要是借助Canvas这个类,它会作为参数传入到onDraw()方法中,供给每个视图使用。

    33710

    Canvas类的最全面详解 - 自定义View应用系列

    前言 自定义View是Android开发者必须了解的基础;而Canvas类的使用在自定义View绘制中发挥着非常重要的作用 网上有大量关于自定义View中Canvas类的文章,但存在一些问题:内容不全...、思路不清晰、简单问题复杂化等等 今天,我将全面总结自定义View中的Canvas类的使用,我能保证这是市面上的最全面、最清晰、最易懂的 文章较长,建议收藏等充足时间再进行阅读 阅读本文前请先阅读...Canvas的本质 请务必记住: 绘制内容是根据画布(Canvas)的规定绘制在屏幕上的 画布(Canvas)只是绘制时的规则,但内容实际上是绘制在屏幕上的 为了更好地说明绘制内容的本质和Canvas,...特别注意:当 rx大于宽度的一半, ry大于高度一半 时,画出来的为椭圆 实际上,在rx为宽度的一半,ry为高度的一半时,刚好是一个椭圆;但由于当rx大于宽度一半,ry大于高度一半时,无法计算出圆弧...画布的构成:由多个图层构成,如下图 在画布上操作 = 在图层上操作 如无设置,绘制操作和画布操作是默认在默认图层上进行 在通常情况下,使用默认图层就可满足需求;若需要绘制复杂的内容(如地图

    3.2K81

    Android开发笔记(十三)视图绘制的几个方法

    三个可进行绘制的方法 在自定义视图中,有三个函数可以重写用于界面绘制,在视图创建过程中,三个函数的执行顺序依次是:onLayout、onDraw、dispatchDraw。...由于该函数没有画布,因此只适合绘制现成的视图控件。 2、onDraw(Canvas canvas) :  自定义控件一般是重写onDraw方法,在画布中绘制各种图形。...3、dispatchDraw(Canvas canvas) :  dispatchDraw与onDraw的区别在于:onDraw在绘制下级视图之前,而dispatchDraw在绘制下级视图之后,所以如果不想自己的绘图被下级视图覆盖的话...Canvas画布的使用 Canvas是Android提供的图形操作类,Canvas的使用不难,多练习几次就熟练了。...Paint的常用操作包括: setAntiAlias : 设置是否使用抗锯齿功能,主要用于画圆圈等曲线 setColor : 设置画笔的颜色 setShader : 设置画笔的渐变效果 setShadowLayer

    1.2K30

    从自定义时钟⏰了解draw流程

    ()方法中,就开始了一系列绘制方法: 1、绘制背景 2、保存图层信息 3、绘制内容(onDraw) 4、绘制children 5、绘制边缘 6、绘制装饰 其中,第三步也就是我们自定义View必用的onDraw...方法,在该方法中,需要我们绘制View本身的内容。...当然,实际情况下的自定义View需要把每个参数值比如颜色、大小、宽度等都设置为可配置的,然后写进style里面,而且对于测量方法也要进行重写,针对不同测量规格进行判断,今天我们就把重点放在onDraw上面...构造函数 身为一个自定义View,首先还是要写构造函数,我们知道自定义View一般需要四种构造函数,在kotlin中其实有一种比较简便的写法: class JimuClockView @JvmOverloads...比如上述的canvas.rotate方法,在这之前需要调用save保存画布的原始状态,最后在调用restore方法恢复画布,完整调用链如下: canvas.save() //... canvas.rotate

    64030

    【Android从零单排系列四十五】《Android中自定义View的实现方法》

    这时就需要使用自定义视图来扩展系统提供的功能,实现更高度的可定制性和交互性。...添加自定义属性:通过在自定义视图类中定义自己的属性,并在XML布局文件中使用这些属性,可以方便地为自定义视图提供更多的定制选项。...您可以使用Canvas对象进行绘制,例如绘制形状、文本、图像等。 考虑测量和布局:如果您的自定义视图具有特定的尺寸要求,可以重写onMeasure()方法来测量视图的宽度和高度,并根据需要调整布局。...添加自定义属性和样式:您可以通过在自定义视图类中添加自定义属性,并使用XML布局文件或代码来设置这些属性,以增加对自定义视图的配置和样式化选项。...引入自定义视图:在XML布局文件或代码中使用您的自定义视图,将其添加到界面中。

    42020

    2014-10-27Android学习------布局处理(六)------26个字母的布局列表的实现-----城市列表应用程序

    得到屏幕的高度,每个字母的高度就是屏幕的高度除以字母的个数(也就是数组的长度) 每个字母的高度=屏幕的高度/字母的个数(数组的长度) 接下来就是用一个循环语句在画布Canvas上面画出这些字母...Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); { // 首先我们设置画布的背景颜色是 #400000...int width = getWidth();//得到画布的宽度 int singleHeight = height / b.length; // 每个字母的高度=屏幕的高度/数组的长度(26个字母...* 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。...* * setColor(int color); * 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。

    74730

    自定义View:Padding与绘制内容

    本文我们将介绍如何使用Canvas绘制折线图,同时也会介绍一些视图的尺寸和padding的一些工作原理。 简单绘制 如果你打算在自定义的view中控制绘制内容,最好是直接继承自View类。...自定义绘制步骤 1.创建一个继承自View的类 2.重写onDraw方法,在该方法内,使用Canvas进行内容绘制。...处理Padding 通常情况下,我们可以在xml布局文件中设置padding等信息,但是对于上面的onDraw方法来说,由于我们并没有处理padding,所以布局文件的padding值是不生效的。...在View中,视图的宽度和高度包含了padding的值,比如一个view的宽度为100像素,两侧的padding值为10像素,那么view的内容只有80像素的绘制宽度。同理高度也是一样。...在View中获取宽度,我们可以使用getWidth(),获取padding,可以使用getPaddingTop(), getPaddingBottom, getPaddingLeft() and getPaddingRight

    1.7K20

    车机Android开发:实现音乐模块的进度条

    引言 在创建自定义进度条组件时,提供了两种方法:使用 Java 和 XML。...以下是对这两种方法的详细说明和实战应用的整理,帮助大家更好理解如何编写和应用自定义进度条组件,非常重要,希望对你们有所帮助....Java 实现进度条的更新 首先定义函数名 然而创建 BitmapDrawable: 对象使用特定的图片资源(如进度条的填充和未填充部分),实现自定义视觉效果的进度条。...方法;计算当前视图的新宽度和高度;如果新的宽度和高度与之前的值不同,更新视图的宽度和高度变量;更新进度条的左、右、上、下边界,以居中显示进度条;这些操作有助于在视图大小改变时,自动调整进度条的位置和大小...方法二:使用 XML 绘制静态进度条 创建一个 layer-list: 在 drawable 资源文件夹中创建一个 XML 文件定义进度条的样式。

    17820

    手撸一个物体下落的控件,实现雪花飘落效果

    笔者参考原文作者的源码,做了一点修改,实现了效果并加入了项目中。不过都大同小异,下面笔者会将学习和制作中的难点和注意点分享给大家。 提炼与分享: 1....如何实现简单的物体下落: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);...然后是X轴,正常的雪花肯定不是竖直下落,也不是折线下落,而是弧形,View中采用的sin函数的-Pi到Pi之间的值绘制弧形。x轴的初始位置通过对屏幕宽度做随机值确定。   ...为什么要使用Builder建造者模式   其实原文已经讲得很仔细了,我们物体会有大量的参数和对应的行为方法,为了提高代码的可读性,我们将物体提取出来,作为一个单独的类。.../** * 改变bitmap的大小 * @param bitmap 目标bitmap * @param newW 目标宽度- * @param newH 目标高度

    1.4K30
    领券