首页
学习
活动
专区
工具
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

android如何获取view布局高度宽度详解

前言 可能很多情况下,我们都会有activity获取view 尺寸大小(宽度高度需求。面对这种情况,很多同学立马反应:这么简单问题,还用你说?你是不是傻。。...当我们 onCreate() 方法获取某个 View 组件宽度高度,直接调用 getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight...下面来一起看看吧 实现方法 一、使用 View.measure 测量 View 该方法测量宽度高度可能与视图绘制完成后真实宽度高度不一致。...OnPreDrawListener 监听事件 视图将要绘制时调用该监听事件,会被调用多次,因此获取到视图宽度高度后要移除该监听事件。...OnGlobalLayoutListener 监听事件 布局发生改变或者某个视图可视状态发生改变时调用该事件,会被多次调用,因此需要在获取到视图宽度高度后执行 remove 方法移除该监听事件

5.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

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

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

1K100

Android 自定义view之画图板实现方法

一个参数构造方法是代码 new 时用到,2个参数构造方法布局xml中用到,3个参数基本就是自定义view类中使用,大概就是这样。...onMeasure()用来指定这个自定义view 大小,onDraw()用来进行实时绘图 最重要3个东西:画布Canvas,画笔Paint,路径Path 代码略长但是注释很全,把需要注意提出来...newPaint()方法,paint有一个setXfermode()方法,这个表示图形混合方式,有18种 ~(比下图多了ADDOVERLAY)~。...); //设置view宽度 //如果布局给出了准确宽度,直接使用宽度,否则设置图片宽度为view宽度 if (widthMode == MeasureSpec.EXACTLY) { width =...(测量模式),计算出整个控件宽高 2.通过canvas.drawBitmap画布上画出bitmap,同时 new 出画笔 Paint 给它设置颜色,粗细等属性 注意: 1.onDraw()方法每次调用

74520

Android自定义View实现旋转圆形图片

一:自定义属性; 二:创建自定义View,构造方法拿到自定义属性; 三:重写onMeasure方法; 四:重写onDraw方法 先来个效果图 ?...isRotate = typedArray.getBoolean(R.styleable.RotateCircleImageView_isRotate, true); } 重写测量方法:主要是测量包裹内容情况下宽度高度值...(宽度等于预测宽度高度按比例缩放) //该方法根据参数宽高强制缩放图片,所以这里根据宽度算出缩放后高度 image = Bitmap.createScaledBitmap...View宽高,测量结束 } 假如宽度是指定大小,我希望高度根据这个大小按比例缩放,那么我需要拿到图片原始大小,所以需要一个tempImage,为什么写一个临时Bitmap?...onDraw方法时候得到是一个旋转了0.8度bitmap,然后16毫秒后启动子线程刷新,再次执行onDraw,得到一个再次旋转0.8度bitmap,以此类推,所以不断旋转。

1.5K60

从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() 返回paintCap,控制如何处理描边线路径开始结束。 void setStrokeCap(Paint.Cap cap) 设置线帽。

88830

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

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

819100

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

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

1.4K20

简单实现Android绘图板

构造方法,首先获取屏幕高度宽度,并创建一个与该View相同大小缓存区,然后创建一个新画面,并实例化一个路径,再将内存位图绘制到cacheCanvas,最后实例化一个画笔,并设置画笔相关属性...(true);//设置抗锯齿效果 paint.setDither(true);//使用抖动效果 } DrawView类onDraw()方法,添加以下代码,用于设置背景颜色、绘制cacheBitmap...之前保存状态,防止保存后对canvas执行操作对后续绘制有影响 canvas.restore(); } Draw类,重写onTouchEvent()方法,为该视图添加触摸事件监听器...,该方法,首先获取触摸事件发生位置,然后用switch语句对事件不同状态添加响应代码,最后调用invalidate()方法更新视图。...item) { //获取自定义绘图视图 DrawView dv=(DrawView)findViewById(R.id.drawView1); dv.paint.setXfermode

1.1K10

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

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

1.8K20

Android View教程之自定义验证码输入框效果

如果我们拿到这样UI,想到布局应该是用4个EditText包在横向LinearLayout里面,但今天要讲View,所以我们决定用一个自定义EditText 画出来。 学到什么?...基本理解画布概念 画布状态、平移 布局测量 画图片 功能需求 高亮当前输入框 输入满4个数字自动调用方法 思路 完全重画一个EditText,就包含了测量布局重新绘制这两个关键步骤。...好了,到这里理一下整体思路: 根据验证码个数以及边框大小来计算输入框显示宽度 覆盖原来EditText画布,重新绘制方框 根据输入索引来确定高亮方框 重写onTextChanged 但满足验证码个数时候调用自动完成方法...来一步步看代码注释: @Override protected void onDraw(Canvas canvas) { // 画支持设置文本颜色,把系统化文本透明掉,相当于覆盖 mTextColor...2、把画布位置移到下一个位置canvas.translate(x,y),下图所示,你会发现方框在画布位置没有发生变化而是画布距离发生了变化。这就是画布平移效果了。 ?

1.2K30

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

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

8.7K31

教你玩转 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

1.7K21

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

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

2.2K10

Android实现带描边圆角图片

MyView内部类,继承android.view.View类,并添加构造方法重写onDraw(Canvas canvas)方法,在里面进行作图: onDraw(Canvas canvas)方法,...首先定义一个画笔,并设置使用抗锯齿功能,然后定义一张背景,然后定义一个要绘制圆角矩形区域,并将画布X轴上平移40像素,Y轴上平移20像素,再绘制一个黑色2像素圆角矩形,作为图片边,最后绘制一个使用...FrameLayout fl=(FrameLayout)findViewById(R.id.frameLayout1); //将自定义MyView视图添加到帧布局 fl.addView(...);//设置颜色为黑色 paint.setStrokeWidth(2);//设置笔触宽度为2像素 canvas.drawRoundRect(rect, 10, 10, paint);//绘制一个描边圆角矩形...TileMode.REPEAT,TileMode.MIRROR); paint.setShader(bs);//设置渲染对象 //绘制一个使用BitmapShader渲染圆角矩形图片

2.2K10

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

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

28210

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

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

2.9K81

Android自定义WaveProgressView实现水波纹加载需求

如何使用 1.1 布局文件   添加自定义控件: <cn.fanrunqi.waveprogressview.WaveProgressView android:id="@+id/waveProgressbar...1.2 <em>在</em>代码<em>中</em> 你可以选择进行如下<em>设置</em>: //<em>设置</em>当前进度值<em>和</em>当前显示<em>的</em>文字 waveProgressbar.setCurrent(int currentProgress,String currentText...); //"#5b9ef4" //设置波浪高度波浪宽度(均为一个波峰大小) waveProgressbar.setWave(float mWaveHight,float mWaveWidth);...首先自定义WaveProgressView继承View,构造函数获取布局文件设置背景,同时设置一个画波浪画笔画文字画笔。  ...,为了能通过代码设置文字颜色,要把设置文字画笔颜色大小放在onDraw方法

84141

自定义时钟⏰了解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

59430
领券