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

android view getWidth()即使在onPreDraw()中也会返回0

在Android开发中,View是用户界面的基本构建块之一。getWidth()是View类的一个方法,用于获取View的宽度。然而,当在onPreDraw()方法中调用getWidth()时,有时会返回0的情况。

这是因为在onPreDraw()方法中,View的绘制尚未完成,因此它的宽度还没有被计算出来。在这个阶段,View的宽度可能还没有被测量或布局,所以getWidth()返回0是正常的。

为了解决这个问题,可以使用ViewTreeObserver来监听View的绘制事件,并在绘制完成后获取宽度。具体步骤如下:

  1. 获取View的ViewTreeObserver对象:
代码语言:txt
复制
ViewTreeObserver observer = view.getViewTreeObserver();
  1. 注册一个OnPreDrawListener监听器:
代码语言:txt
复制
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        // 在这里获取View的宽度
        int width = view.getWidth();
        
        // 执行你的逻辑操作
        
        // 返回true表示绘制完成,返回false表示继续等待绘制
        return true;
    }
});

通过这种方式,在onPreDraw()方法中获取getWidth()将会得到正确的宽度值。

至于Android开发中的其他相关概念和技术,例如前端开发、后端开发、软件测试、数据库、服务器运维、云原生、网络通信、网络安全、音视频、多媒体处理、人工智能、物联网、移动开发、存储、区块链、元宇宙等,每个领域都有其独特的概念和应用场景。

如果您对这些领域中的任何特定概念或技术有疑问,我可以为您提供更详细的解答和相关的腾讯云产品介绍链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

这样物体会从不同的位置下落,在相同速度的情况下,也能在不同的时间进入屏幕。   ...然后是X轴,正常的雪花肯定不是竖直下落,也不是折线下落,而是弧形,View中采用的sin函数的-Pi到Pi之间的值绘制弧形。x轴的初始位置通过对屏幕宽度做随机值确定。   ...绘制图片并且控制其大小   绘制图片在View中是有提供方法的:canvas.drawBitmap(bitmap,presentX,presentY,null);从方法中可以看到,我们需要的是bitmap...源码: 画布View: package com.wusy.wusylibrary.view.FallingView; import android.content.Context; import android.graphics.Canvas...; import android.util.AttributeSet; import android.view.View; import android.view.ViewTreeObserver;

1.4K30

最简单也最难——怎样获取到Android控件的高度「建议收藏」

事实上是并没有简单的,不信的话,你能够去试一下,在onCreate里面,你是无法获得长宽值的,始终为0。 原因 这是为什么呢,事实上熟悉view绘制流程的朋友应该一眼就看出来了。在onCreate中。...我们的控件事实上还并没有画好,换句话说,等onCreate方法运行完了,我们定义的控件才会被度量(measure),所以我们在onCreate方法里面通过view.getHeight()获取控件的高度或者宽度肯定是...解决 No1: int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec...(0, View.MeasureSpec.UNSPECIFIED); imageView.measure(w, h); int height = imageView.getMeasuredHeight...如今看来,看似简单问题也不是那么简单吧。 以上。

84610
  • Android 12 SplashScreen API快速入门

    何时会显示SplashScreen 注意,SplashScreen在Android 12上是强制的,即使你什么都不做,你的App在Android 12上也会自动拥有SplashScreen界面。...return false } }) } } 这里我们在回调函数onPreDraw()中返回了一个false,也就意味着,我们的PreDraw阶段始终没有准备好...比如刚才提到的从磁盘读取数据的场景,我们可以一开始在onPreDraw()中函数中返回false,然后开启子线程去读取数据,等到数据读取完成再将返回值改成true即可。...isReady = true } } } 注意,在SplashScreen的显示过程中,onPreDraw()函数是以很高的频率在持续刷新的。...所以它依然会将主线程阻塞住,导致应用程序无法响应用户的输入事件,直到我们在onPreDraw()函数返回true才会停止刷新。

    2K10

    Android自定义View——从零开始实现雪花飘落效果

    在上述代码中View基本的框架我们已经搭好了,思路其实很简单,我们需要做仅仅是在每次重绘之前更新做下落运动的物体的位置即可 封装下落物体对象 相关博文链接 Android开发中无处不在的设计模式——Builder...模式:http://blog.csdn.net/sbsujjbcy/article/details/49208969 [Android] 获取View的宽度和高度:http://www.jianshu.com.../p/d18f0c96acb8 要实现大雪纷飞的效果,很明显只有一个雪球是不够的,而且雪也不能只有雪球一个形状,我们希望可以自定义雪的样式,甚至不局限于下雪,还可以下雨、下金币等等,因此我们要对下落的物体进行封装...0, oldW, oldH, matrix, true); return bitmap; } 在Activity中初始化下落物体样式时我们就可以导入drawable资源和设置物体大小了(图片资源我是在阿里图标库下载的...扩展二:实现雪花“大小不一”、“快慢有别”的效果 之前我们通过导入drawable资源的方法让屏幕“下起了雪花”,但雪花个个都一样大小,下落速度也都完全一致,这显得十分的单调,看起来一点也不像现实中的下雪场景

    1.7K20

    2014-11-3Android学习------关于ViewPager的实现步骤--------GIF动画实现

    id 3.定义一个适配器,主要的工作就是将数据显示在ViewPager上,思路类似于ListView需要一个Adapter 4.在布局文件对应的activity类中先定义必要的变量 5.对ViewPager...接下来我们一步一步的去实现这个翻页的效果: 1.确定依赖包的存在: 2.在XML文件中定义ViewPager view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; public class...0); return views.get(arg1); } 4)返回页卡的数量 @Override public int getCount() { // TODO Auto-generated...== (arg1); } 4.在实现该布局文件的activity类中定义必要的变量 这里的变量就非常的多了,我们一个一个来说了 1)必须要构造出视图的集合,也就是一个个视图,填充在ViewPager

    29420

    Activity 切换动画---点击哪里从哪放大

    效果图.gif 这次要实现的动画效果就是类似于上图那样,点击某个 view,就从那个 view 展开下个 Activity,Activity 退出时原路返回,即缩放到点击的那个 view。...总之,我对这个接触也不多,这里就大概概括一下使用的一些步骤: 需要对共享的元素设置 transitionName,在 xml 中设置 android:transitionName 或代码里调用 View.setTransitionName...也就是说,放大动画开始时,新 Activity 是从点击 View 的宽高作为起始放大至全屏,返回时从全屏缩小至点击 View 的宽高。...这样做的好处是,动画执行过程中,如果网络或本地数据已经回调,通知 adapter 去刷新 view 时,这样会导致动画很卡顿。...在设置了 android:windowIsTranslucent=true 时,有的盒子界面就会是透明的,即使你设置了一张不透明的背景图,但透明度不会很明显。

    4K50

    Android自定义View:getWidth()、getMeasuredWidth()获取宽高有什么区别?

    前言 在自定义View的过程中,使用getMeasuredWidth() / getMeasuredHeight() 与 getWidth() / getHeight()都能获取View的宽 / 高,但是二者有什么区别呢...() / getMeasuredHeight()返回值 1.1 结论 返回的值是 View在Measure过程中测量的宽 / 高 1.2 源码分析 由于getMeasuredWidth()与getMeasuredHeight...View的宽/高值 return result; } 2. getWidth() / getHeight()返回值 2.1 结论 返回的值是 View在Layout...应用场景 getMeasuredWidth() / getMeasuredHeight()是在Measure过程中赋值的,所以需在Measure过程后获取的值才有意义 同理,getWidth() / getHeight...中获取View的宽/高 getWidth() / getHeight():在除onLayout()外的地方获取View的宽/高 4.

    1.7K41

    安卓 View 和常见控件

    在自定义 listview 的 item 的布局的时候, 通常加上最小高度的属性, 防止高度过小导致用户点击不到。 android:minHeight="?...getText 不为null, 然后得到的是空字符串 "", 然后长度为0 EditText 主题一般会自带背景,如果需要去掉的话, android:background="@null" Android...根据不同的情况R.color.blue也可以是R.string.blue或者 //另外还可以使用系统自带的颜色类 setTextColor(android.graphics.Color.BLUE);...中getWidth()和getMeasuredWidth()之间的区别 getMeasuredWidth()获取的是 view 原始的大小,也就是这个 view 在XML文件中配置或者是代码中设置的大小...getWidth()获取的是这个 view 最终显示的大小,这个大小有可能等于原始的大小也有可能不等于原始大小。

    98810

    Andrid自定义view:打造3D画廊

    昨日朋友给我看了下这样的效果,我觉得很有意思,今日闲下来便写了这篇文章,并且传到了github,本文的末尾也附上了链接。...,并返回一个继承自Object的key,这个key将会在第三个方法destroyItem和第四个方法isViewFromObject中作为参数调用。   ...view, Object object)   确定instantiateItem返回的特定key 对象是否与page View有关联。...由于instantiateItem中可以以自身page为key返回,所以在这里就可以这样写: @Override public boolean isViewFromObject...position的取值有如下说明: position是指的是页面相对于中间页面的位置参数,根据位置不同,0的时候在中间最前面,1的时候页面完全在右边,-1的时候页面完全在左边。

    65720

    Android自定义View:源码解析通过getWidth() 与 getMeasuredWidth()获取宽高的区别

    前言 在自定义View的过程中,使用getMeasuredWidth() / getMeasuredHeight() 与 getWidth() / getHeight()都能获取View的宽 / 高,但是二者有什么区别呢...---- 1. getMeasuredWidth() / getMeasuredHeight()返回值 1.1 结论 返回的值是 View在Measure过程中测量的宽 / 高 1.2 源码分析 由于getMeasuredWidth...View的宽/高值 return result; } ---- 2. getWidth() / getHeight()返回值 2.1 结论 返回的值是 View在Layout...应用场景 getMeasuredWidth() / getMeasuredHeight()是在Measure过程中赋值的,所以需在Measure过程后获取的值才有意义 同理,getWidth() / getHeight...中获取View的宽/高 getWidth() / getHeight():在除onLayout()外的地方获取View的宽/高 ---- 4.

    1.8K20

    Bitmap 详解

    Bitmap在Android中指的是一张图片,可以是png,也可以是jpg等其他图片格式。...Drawable 作为Android 平台下图形对象,可以装载常用的格式,比如GIf,PNG,也可以进行渐变,图形等 2.1 Drawable是一种可以在Canvas上进行绘制的抽象的概念。...在Android2.3时代,Bitmap的引用是放在堆中的,而Bitmap的数据部分是放在栈中的,需要用户调用recycle方法手动进行内存回收,而在Android2.3之后,整个Bitmap,包括数据和引用...在Android应用开发过程中所说的缓存有两个级别,一个是硬盘缓存,一个是内存缓存 图片的质量压缩 上述用inSampleSize压缩是尺寸压缩,Android中还有一种压缩方式叫质量压缩。...0, paint) ;       return outBitmap ;   }     高斯模糊 高斯模糊实现原理 在Android平台上进行模糊渲染是一个相当耗CPU也相当耗时的操作,一旦处理不好

    2.1K20

    android学习笔记----关于图形的基本处理讲解

    样本大小是任一维度中与解码位图中的单个像素相对应的像素数。例如,inSampleSize == 4返回的图像是原始宽度/高度的1/4,像素数量的1/16。...系统测试): 批注: 画线的功能一定经历了3个动作,第一次点上去会识别为触摸,然后在不断移动,最后放手识别为抬起 Bitmap类里的一个方法 public boolean compress (Bitmap.CompressFormat...注意:并非所有Formats都直接支持所有位图配置,因此BitmapFactory返回的位图可能位于不同的bitdepth中,和/或可能丢失了每像素alpha(例如,JPEG仅支持不透明像素)。...我们打开 drawable-mdpi 文件夹,看看某一图片,选中该文件 右击并选择“查看信息 (get info)”,在这里,对于该图片的 mdpi 版本,我们看到尺寸是 88 X 88 像素,所以在最终应用中...里,1dp=3px,上述规范中,状态栏高度是24dp,所以在设计稿中状态栏的高度就是72px。

    65220

    项目需求讨论:截图—涂鸦—分享

    我们在自定义View 中写入一个方法: /** * 设置背景图片及监理新的用来涂鸦的Bitmap * * @param bitmap 传入的截图界面图片 */ public void...这样等会我们就可以用这个paintCanvas在新的图片上面进行画画了。 我们在onDraw方法中也只要画这二个Bitmap就可以了。...---- 撤销功能 撤销其实也很简单,就是我们在画的时候,把每次画的Path和所画这个Path的画笔颜色保存下来,放在一个List集合里面,然后每次点撤销,就把List集合里面最后一个的Path给去掉,...大家也可以去我上面贴的Github地址中取下载demo。...android.graphics.Bitmap; import android.graphics.Matrix; import android.view.View; import android.view.ViewGroup

    71140
    领券