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

动画结束后,第一次View.getHeight得到"0“,只是我得到了高度,为什么?

动画结束后,第一次调用View.getHeight()得到"0"的原因可能是因为在动画结束之前,View的布局还没有完成,因此获取到的高度为0。在Android中,布局的测量和绘制是异步进行的,而动画的执行也是异步的。因此,当动画结束时,View的布局可能还没有完成,导致获取到的高度为0。

为了解决这个问题,可以尝试在动画结束后延迟一段时间再获取View的高度,或者在动画结束后添加一个监听器,在监听器中获取View的高度。这样可以确保在布局完成后再获取高度,避免获取到的高度为0。

另外,还可以使用ViewTreeObserver来监听View的布局变化,在布局完成后获取View的高度。具体的实现可以参考以下代码:

代码语言:txt
复制
View view = findViewById(R.id.your_view);
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // 在布局完成后获取View的高度
        int height = view.getHeight();
        // 在这里进行后续操作
        // ...
        
        // 移除监听器,避免重复调用
        view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    }
});

以上是一种可能的解决方案,具体的实现方式可以根据实际情况进行调整。

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

相关·内容

5分钟快速实现Android爆炸破碎酷炫动画特效的示例

) | | |-- ExplosionField.java(爆炸破碎动画所依赖的View) | | `-- ParticleModel.java(每个破碎的粒子的model,颜色、位置、大小等) |...,动画结束,把View消失掉 * @param view 可能是ViewGroup的view */ private void setSelfAndChildDisappearOnClick(...,动画结束,View自动出现 * @param view 可能是ViewGroup的view */ private void setSelfAndChildDisappearAndAppearOnClick...view相对于整个屏幕的坐标 rect.offset(0, -UIUtils.statusBarHeignth()); //去掉状态栏高度 animator = new ExplosionAnimator...为什么还要引入一个ExplosionField类呢?动画的执行为什么不能直接在原本的View上执行呢?偏偏要在一个看似多余的ExplosionField对象上执行呢。

98610
  • 优酷环形菜单-旋转动画

    获取三个圆环RelativeLayout对象 给菜单图标(icon_menu)设置点击事件 定义一个成员变量isLevel3Show来存储第三级菜单是否显示 判断上面的变量,来显示隐藏第三级菜单,定义一个类实现动画效果...isLevel3Show 定义一个工具类MyUtils,实现旋转动画 定义一个startAnimOut() 获取RotateAnimation对象,旋转对象的默认中心是左上角,开始度数默认是水平向右为0...度,顺时针转;构造函数:开始度数,结束度数,圆心x(宽度一半),圆心y(高度) 调用RotateAnimation对象的setDuration()方法,设置执行时间,参数:毫秒 调用RotateAnimation...对象的setFillAfter()方法,设置执行完毕保持状态,参数:布尔值 定义一个startAnimIn(),参数:RelativeLayout对象,延迟毫秒 和上面一样,度数不一样而已,从180度到...180, view.getWidth()/2, view.getHeight()); rotateAnimation.setDuration(1000); rotateAnimation.setFillAfter

    1.3K20

    神奇的 ViewDragHelper,让你轻松定制拥有拖拽能力的 ViewGroup

    第一次见到这样的效果时,心里也痒痒的,急于想实现这种功能,后来因为拖延症的问题,就一直没有去弄这件事。现在这段时间,工作比较轻闲,所以对自己几年 Android 生涯所运用的技术做一些总结与思考。...手指释放,childView 落在新的位置或者回弹到指定的某处,拖拽结束。 ?...需要动画过程的每一帧调用 continueSettling() 方法,直到它返回 false。 3. 如果 continureSettling() 返回 false 表明此次动画结束。...如果看过《不再迷惑,也许之前你从未真正懂得 Scroller 及滑动机制》这篇博文的同学,已经可以很快与 Scroller 建立联系,Scroller 本身只是针对数值作动画而不会移动 View 本身的内容...也许有人好奇,如果只是返回值大于 0 就好了,那么为什么返回值不用 boolean 类型呢?

    3.3K22

    Android进阶之绘制-自定义View完全掌握(一)

    已经能正确点击到每一个圆环,而我的代码只是将三个相对布局调换了一下位置,既然大圆环会覆盖到小圆环,那我们直接把大圆环放到最上面,这样就不会出现覆盖问题了。 这是我们需要注意的一个点。...这样就实现了再点击手机的menu键时圆环旋转消失,但是这样就产生了一个bug,不知道观察了上面的动图大家发现bug没有,当我按menu键隐藏圆环时,再去点击圆环的位置,圆环还是旋转出来了,按道理我们的圆环消失...这里就涉及到了普通动画和属性动画的区别了。当然,解决办法有很多,这里介绍两种。 第一种,给每个孩子设置不可以点击。...第二种方法,前面也说到了,我们可以通过属性动画解决该bug。 属性动画和普通动画的区别在于,普通动画只有视觉效果,而控件不会改变它的位置;属性动画不仅有动画效果,而且控件会随着动画而改变位置。...对于动画,Android中分了三个部分,补间动画、帧动画、属性动画动画的话,也会在今后的博客中专门讲解一下。那么今天的内容就到这里了。 点击下载源码

    60040

    初学前端用代码实现一个网页老虎机游戏

    这个问题其实很简单,格子中的内容单纯只是一个ul列表,只是给格子添加了overflow:hidden使格子外的数字进行了隐藏。...其实这里并没有实现所谓的“无限滚动”,只是把初始化的数组按倍数给扩充了很多分,使得整个列表变得非常长,以至于在短时间内的过渡效果中整个列表看着像是在“无限滚动”。...那我不就得到0~6(不包含6)之间的一个随机数,并且将获取的随机数通过Math.floor()做一个向下取整,那我不就得到0,1,2,3,4,5的随机数了。...从效果图中我们可以看出老虎机从开始游戏到游戏快结束时一直是在抖动的,关于这个也给大家稍微分享一下怎么实现的。 ? 其实就一个东西,加个动画。...但是呢,小编还想再玩一把,然后在第二次点击开始手柄之前就想到了这个老虎机存在的缺陷,总结起来包括以下几点: 游戏从开始到结束之后,再次点击开始手柄,应该将游戏进行重置 重置游戏的过程中不应该出现过渡效果

    5.3K10

    巧用ViewPager 打造不一样的广告轮播切换效果

    ,一定知道在5月6号的时候推送了一篇文章,文章名为Android超高仿QQ附近的人搜索展示(一),通过该文可以利用ViewPager实现单页显示多个Item且能够添加一些炫酷的动画效果。...,又跑了下JazzyViewPager的例子,看看有什么动画效果可以借鉴的,ok,最终呢,产生以下几个效果图。...view.setRotation(mMaxRotate); view.setPivotX(view.getWidth() * 0); view.setPivotY(view.getHeight...第一页滑动结束时,旋转中心在左边页面的右下角,即(width,height). 恩,这个旋转中心的位置是自己定义的,不一定是最好的效果,如果有必要大家可以自己选择,保证良好的显示效果。...rotation = position * 15f 好了,经过上面的分析,本文就基本结束了,有兴趣可以下载源码多分析几个,或者创造几个动画效果,千万不要忘了告诉可以加入到这个动画库中。

    65820

    的2017年总结笔记整理

    ,不能放,博客的事也不能放,坚持; 笔记整理 平时是会通过 word 来记录一些学习笔记: ?...无法获得一个 view 的高度和宽度,这是因为 View 组件布局要在 onResume() 回调完成。...但是需要注意的是 OnGlobalLayoutListener 可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener 注销掉。...,显的特别啰嗦,当时就在想可不可以在 SharedPreferences 上设置一个观察者,一旦有什么风吹草动,就自动通知目标,不曾想,人家早已经实现了,只是愚昧无知,今天去看了下源码发现了这个方法,...4.Activity切场动画 原文跳转:Activity 切换动画---点击哪里从哪放大 这篇介绍的是如何实现 Activity 的切换动画只是记录了下实现这个功能的一个思路,以及这过程中碰到的一大堆奇葩问题

    748110

    Android仿网易云 鲸云音效效果

    设置一直旋转的属性动画 objectAnimator = ObjectAnimator.ofFloat(ivShowPic, "rotation", 0f, 360f); objectAnimator.setDuration...,做的过程中也有出现一些很魔性的动画,很有意思 然后发现,surfaceView的动画会出现在imageView的上面,虽然把imageView的高度调了一下还是没效果,发现是之前设置surfaceView...,其实模糊化以后的背景质量非常小(图片都模糊了肯定小呀),远远小于要旋转的那张图片的质量,所以绘制surfaceView背景可能比较好; 获取控件的截图 由于我的surfaceView不是宽高全屏的,只是中间一部分...二阶贝塞尔曲线 处理点的跳动 到了最后一步,让点分裂成两个分别上下移动,再次将同一边的连成曲线并将移动的上下两个点连线,移动距离先取随机数,效果好了再看音频相关东西,这个有点难度,尝试了很多次,...这样的话,那是不是把它绕圆一圈,然后在按相反方向绕一圈,同样跳动的两个点连线,然后随便画画曲线是不是就ok啦;做完就发现里面的值太大了,都看不出来是个圆了,那就都减去一点高度什么的,调整一下大小;然后这次就先画一个三次贝塞尔曲线吧

    2.4K20

    巧妙运用补间动画,自定义广告轮播CarouselView 2.0

    如果对补间动画还存在疑惑的同学可以阅读笔者的另外一篇文章弥补一下。这次彻底搞懂Android补间动画 先看效果: 饿,不知道为什么,这里做成gif异常的卡顿,实际效果肯定是如丝版顺滑的。 ?...第一类是只显示一个Item的动画,这类动画和传统的轮播没什么大的差异,只是多了一些补间动画修饰。   ...第二类是一页显示多个Item的动画,这样的轮播图看着更时尚也更高端,相比较于第一类,只是多了这样一段代码: /** * 当需要ViewPager一个界面显示多个Item的时候,调用改方法。...PageTransformer的postion   我们可以看到void transformPage(View view, float position)的position的值主要需要关注是position...很显然,这只是一个二元一次方程,可得ScaleX=1+.01f*position。 设置(0,1]的状态,同上方式,我们可以计算出ScaleX=1-0.1f*position。

    1.1K20

    优化了进度条,页面性能竟提高了70%

    在梳理的过程中,到了有个进度条组件写的非常好,这又想起刚开始学前端时写的进度条的代码,跟这个比起来真的差距太大了(大部分的初学者应该都想不到,而且第一次家实习公司带的mentor亦是如此)。...进度条随着视频的长度而进行增长,视频暂停,进度条的动画也会随之暂停 接下来看看大部分人是怎么写的,为什么说思路和性能不好。...0 : 1) } // 动画结束时触发的事件 const end = () => { setCount(count + 1) // 播放次数 +1...重绘:不是所有的DOM变化都影响元素的几何属性,如果改变元素的背景色并不影响它的宽度和高度,这种情况,只会发生一次重绘,而不会发生重排,因为元素的布局没改变 所以知道了重排和重绘造成的严重问题,我们马上对其进行分析优化...看图中右侧,FPS基本是稳定在32 ~ 50之间 可以很清楚看到,优化前的FPS波动非常严重,即不够稳定,所以容易​出现卡顿问题;而优化的FPS的变化是不大的,整体变化趋势比较平,几乎是一直线 在这样一个极简页面中

    79430

    优化了进度条,页面性能竟提高了70%

    在梳理的过程中,到了有个进度条组件写的非常好,这又想起刚开始学前端时写的进度条的代码,跟这个比起来真的差距太大了(大部分的初学者应该都想不到,而且第一次家实习公司带的mentor亦是如此)。...: 进度条随着视频的长度而进行增长,视频暂停,进度条的动画也会随之暂停 接下来看看大部分人是怎么写的,为什么说思路和性能不好。...0 : 1) } // 动画结束时触发的事件 const end = () => { setCount(count + 1) // 播放次数 +1...重绘:不是所有的DOM变化都影响元素的几何属性,如果改变元素的背景色并不影响它的宽度和高度,这种情况,只会发生一次重绘,而不会发生重排,因为元素的布局没改变 所以知道了重排和重绘造成的严重问题,我们马上对其进行分析优化...跑分 看图中右侧,FPS基本是稳定在32 ~ 50之间 可以很清楚看到,优化前的FPS波动非常严重,即不够稳定,所以容易​出现卡顿问题;而优化的FPS的变化是不大的,整体变化趋势比较平,几乎是一直线

    90920

    优化了进度条,页面性能竟提高了70%

    在梳理的过程中,到了有个进度条组件写的非常好,这又想起刚开始学前端时写的进度条的代码,跟这个比起来真的差距太大了(大部分的初学者应该都想不到,而且第一次实习的公司带的mentor亦是如此)。...,如图中底部的箭头所示: 进度条随着视频的长度而进行增长,视频暂停,进度条的动画也会随之暂停 接下来看看大部分人是怎么写的,为什么说思路和性能不好。...0 : 1) } // 动画结束时触发的事件 const end = () => { setCount(count + 1) // 播放次数 +1...重绘:不是所有的DOM变化都影响元素的几何属性,如果改变元素的背景色并不影响它的宽度和高度,这种情况,只会发生一次重绘,而不会发生重排,因为元素的布局没改变 所以知道了重排和重绘造成的严重问题,我们马上对其进行分析优化...跑分 看图中右侧,FPS基本是稳定在32 ~ 50之间 可以很清楚看到,优化前的FPS波动非常严重,即不够稳定,所以容易出现卡顿问题;而优化的FPS的变化是不大的,整体变化趋势比较平,几乎是一直线

    1.1K40

    Android项目实战(三):实现第一次进入软件的引导页

    最近做的APP接近尾声了,就是些优化工作了, 我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图) 自己做了一下,结合之前学过的 慕课网_ViewPager...切换动画(3.0版本以上有效果) 思路很简单,APP的主界面还是作为主Activity,只要新添加一个类来判断是不是第一次打开APP 设主activity 名字为:MainActivity.java  ...判断是不是第一次打开APP且实现引导页面的类 LoginActivity ,另外还需要一个类 这是安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)中用到的 ZoomOutPageTransformer.java...; 11 } 2.在LoginActivity类中判断是不是第一次打开,如果是,则显示ViewPager切换动画效果 如果不是,则执行finish();语句,直接结束这个Activity  自然的就回到了主...View view, float position) { 12 int pageWidth = view.getWidth(); 13 int pageHeight = view.getHeight

    1.2K50

    实现杂记(27):解决在onCreate()过程中获取View的width和Height为0的4种方法

    从这个结果可以看出,都是在onResume之后才开始拿到这值的, 使用  onLayout()方法得到的结果,会在第一次输出,当然这个函数会执行很多次,例如后面的又输出来一次, 其中subview输出的是将...0.view.getWidth()和view.getHeight()为0的根本原因是控件还没有完成绘制,你必须等待系统将绘制完View时,才能获得。...一般来说OnGlobalLayoutListener就是可以让我们获得到view的width和height的地方.下面onGlobalLayout内的代码会在View完成Layout过程调用。...}); 9 } 10 }); 但是要注意这个方法在每次有些view的Layout发生变化的时候被调用(比如某个View被设置为Invisible),所以在得到你想要的宽高...(); //height is ready 6 } 7 }; 需要注意的是onLayout方法会调用很多次,所以要考虑好在这个方法中要做什么,或者在第一次执行禁用掉你的代码。

    1.4K20

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券