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

在基于ARM的设备上,getHeight()始终为0 onMeasure

在基于ARM的设备上,getHeight()始终为0 onMeasure是指在Android开发中,当自定义View的onMeasure方法被调用时,getHeight()方法返回的值始终为0的问题。

onMeasure是View的一个重要方法,用于测量View的宽高。在自定义View中,我们需要重写onMeasure方法来指定View的宽高。然而,在某些基于ARM架构的设备上,当我们在onMeasure方法中调用getHeight()方法时,会发现返回的值始终为0,即使我们已经设置了View的宽高。

这个问题的原因是在某些ARM设备上,onMeasure方法在调用时可能会出现延迟,导致getHeight()方法在onMeasure方法中调用时还没有正确更新View的高度。因此,我们不能依赖getHeight()方法来获取View的高度。

解决这个问题的方法是使用MeasureSpec来获取View的测量模式和测量大小。MeasureSpec是一个32位的int值,其中高2位表示测量模式,低30位表示测量大小。我们可以通过MeasureSpec.getMode()和MeasureSpec.getSize()方法来获取测量模式和测量大小。

在onMeasure方法中,我们可以使用MeasureSpec.getSize()方法来获取View的测量宽度和测量高度。例如:

代码语言:txt
复制
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    // 使用获取到的宽高进行自定义View的测量逻辑
    // ...
}

这样,我们就可以正确地获取到基于ARM设备上的自定义View的宽高了。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台:https://cloud.tencent.com/product/mpp
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云音视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 掌握Android自定义View与独家优化技巧

    这个方法决定了View宽度和高度,通常基于View内容和布局需求计算测量值。...0, getWidth(), getHeight(), paint); } 步骤4: XML布局中使用自定义View 你可以XML布局文件中使用你自定义View,就像使用标准UI组件一样。...适配屏幕尺寸:考虑不同屏幕尺寸和密度下表现,以确保用户界面适应不同设备。 自定义属性:如果需要,可以定义和处理自定义属性,以便在XML布局中配置自定义View。...自定义View类中,你可以创建一个Canvas和一个Bitmap,然后Canvas绘制内容。这样,onDraw方法中,你只需要将Bitmap绘制到屏幕,而不必每次都重新绘制内容。...// cacheCanvas绘制内容 cacheCanvas.drawRect(0, 0, getWidth(), getHeight(), paint); //

    49420

    简单实现满屏表情下落动画效果,你也可以

    之前玩微信时候,给好友发一句“圣诞快乐”就会有满屏圣诞树往下掉,当时觉得这个动画好酷。正好在公司项目中需要用到这样动画效果。于是写了一个小Demo,就有了这篇文章。...x轴范围,第二个参数代表y轴范围,第三个参数是表情图片。...createDropLook方法中相信大家都看得懂,主要就是用随机数初始化DropLook坐标及下落速度等。...然后就是用drawBitmap方法把looks里面逐个绘制出来。并且再把looky轴坐标加上下落速度等,旋转角度也是如此。最后就是调用invalidate()不断地重绘。总体并没有什么难点。...当然DropLookView也有需要改进地方。比如说可以布局文件中自定义表情下落数量等。这些就需要自己根据需求来更改了,那今天就先这样吧。

    79040

    Android自定义view仿IOS开关效果

    本文主要讲解如何在 Android 下实现高仿 iOS 开关按钮,并非是 Android 自带 ToggleButton 修改,而是使用 API 提供 onDraw、onMeasure、Canvas...基本原理就是 Canvas 叠着放两张图片,上面的图片根据手指触摸情况,不断移动,实现开关效果。 废话不说,效果图,看看怎么样 ? 样式如下: ?...所以我们必须实现 View 三个重要方法,以告诉它这些信息。即:onMeasure(画多大),onLayout(画哪儿),onDraw(怎么画)。 View生命周期 ?...动手写之前,必须先了解以下几个概念: 1.View 默认不支持 WRAP_CONTENT,必须重写 onMeasure 方法,通过 setMeasuredDimension() 设置尺寸 2.基本事件分发机制...:onClickListener 一定是 onTouchEvent 之后执行 自定义View流程 ?

    1.3K40

    Android自定义AvatarImageView实现头像显示效果

    1.PorterDuffXfermode   这是由Tomas Proter和 Tom Duff命名图像转换模式,它有16个枚举值来控制Canvas 上下两个图层交互(先画图层在下层)。 ?...0, paint); return finalBmp; } 开始重绘(主要是进行缩放和把最终图像绘制view显示)。...canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint); //如果圆形边缘宽度不为0 我们还要绘制带边界外圆形...布局实际大小,方形 mBorderRect.set(0, 0, getWidth(), getHeight()); //计算 圆形带边界部分(外圆)最小半径,取mBorderRect宽高减去一个边缘大小一半较小值...* 作用:保证图片损失度最小和始终绘制图片正中央那部分 */ private void updateShaderMatrix() { float scale; float dx = 0; float

    2.3K61

    Android 自定义View中onMeasure onLayout onDraw

    他们作用 onMeasure 计算当前View宽高 onLayout 处理子View布局 onDraw 绘制当前View 调用顺序onMeasure–>onLayout–>onDraw..., int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // 获取宽-测量规则模式和大小...这里对比两个方法 getMeasuredHeight() 获取测量高度 可能和View真实高度不一样 如果我们不调用requestLayout重新layout的话 getHeight()获取一直会是之前高度...getHeight() 获取真实高度 自定义属性 values文件夹下,打开attrs.xml,其实这个文件名称可以是任意,写在这里更规范一点 假设我们用到了两个属性一个宽度,一个颜色值属性...: 第一个方法,一般我们这样使用时会被调用:View view = new View(context) 第二个方法,当我们xml布局文件中使用View时,会在inflate布局时被调用 <View layout_width

    2.6K10

    Android消息个数提醒控件使用详解

    前言 QQ中有消息个数提醒控件,虽然现在没用到,但是以后可能会用到,所以就实现它,也不难。 实现 效果图如下: ?...mBgPaint.setColor(Color.RED); mBgPaint.setAntiAlias(true); pfd = new PaintFlagsDrawFilter(0,...()/2, Math.max(getWidth()/2, getHeight())/2, mBgPaint); super.draw(canvas); } } 我是直接继承至TextView...先要覆盖onMeasure方法来得到宽度和高度,因为背景圆形,所以我们取宽度和高度两者之间最大值,然后设置控件大小一个正方形,在这个正方形矩形里面,调用drawCircle方法来绘制圆形,设置画笔颜色红色即可...小结 布局文件使用这个类时候,要设置android:gravitycenter,这样数字就可以居中了,之所以没有继承View来进行写,因为View还要自己去画数字,这样就增加了难度,不值得了。

    57820

    Android自定义控件总结

    绘制流程 onMeasure测量view大小,设置自己显示屏幕宽高。...(三个构造方法) 第二个是创建布局文件调用构造函数 2、onMeasure测量view大小。 设置自己显示屏幕宽高。...对于普通View其MeasureSpec由父容器Measure和自身LayoutParams共同确定。 重写onMeasure为了测量view大小, 设置自己显示屏幕宽高。...getHeight()和getMeasuredHeight()区别: 有俩种方法可以获得控件宽高 getMeasuredHeight(): 控件实际大小 获取测量完高度,只要在onMeasure...measure里调用onmeasure getHeight():控件显示大小,必须在onLayout方法执行完后,才能获得宽高,这种方法不好,得等所以都测量完才能获得。

    99311

    Android自定义View新年烟花、祝福语横幅动画

    实现过程中,横幅裁剪计算,捣腾了比较久时间,初版采用属性动画计算float一个比率值,来配合每一帧裁剪绘制,如下代码: private static class RollView extends...= 0; mSrc.top = 0; mSrc.right = mRollWidth; mSrc.bottom = mBitmap.getHeight(); mDst.left = (int)...- mRollWidth; mSrc.top = 0; mSrc.right = mBitmap.getWidth(); mSrc.bottom = mBitmap.getHeight(); mDst.left...,那么可能由于最终转成Rect坐标时, float to int ,有精度损失:1个px 而引起效果不理想 */ ValueAnimator animator = ValueAnimator.ofFloat...,所以计算中强制加上了1px(代码中有); 这样虽然解决了有1px没有绘制问题,但是会发生绘制时不够平滑,而出现抖动情形(某些devices) 所以最好还是不要使用float来计算 后来

    85810

    Android自定义控件总结

    绘制流程 onMeasure测量view大小,设置自己显示屏幕宽高。...(三个构造方法) 第二个是创建布局文件调用构造函数  2、onMeasure测量view大小。 设置自己显示屏幕宽高。 ?...对于普通View其MeasureSpec由父容器Measure和自身LayoutParams共同确定。 重写onMeasure为了测量view大小, 设置自己显示屏幕宽高。...getHeight()和getMeasuredHeight()区别: 有俩种方法可以获得控件宽高 getMeasuredHeight(): 控件实际大小 获取测量完高度,只要在onMeasure...measure里调用onmeasure getHeight():控件显示大小,必须在onLayout方法执行完后,才能获得宽高,这种方法不好,得等所以都测量完才能获得。

    1.3K80

    Android 自定义最大宽度,高度, 宽高比例 Layout

    ---- 原理介绍 原理其实很简单,对自定义 View 有基本了解的人都知道,View 宽度和高度,是 onMeasure 方法中进行测量,他们大小受 MeasureSpec 影响。...既然如此,那么我们继承 FrameLayout,重写它 onMeasure 方法。 onMeasure 方法中根据我们指定最大宽度,高度和比例对 MeasureSpec 进行调整即可。...heightSize = getHeight(heightSize); if (mRatio >= 0) { widthSize = (int) (heightSize...最后,根据相应 size,mode 生成相应 MeasureSpec 当模式已高度基准时候,我们首先对高度进行调整,是否超出最大高度,超出取最大高度,没超出,取原来值。... API level 26.1.0 时候,上述 PercentFrameLayout,PercentRelativeLayout 背标记为过时,并推荐使用 ConstraintLayout。

    2.5K20
    领券