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

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

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

相关·内容

优酷环形菜单-旋转动画

获取三个圆环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.5K33
  • Android进阶之绘制-自定义View完全掌握(一)

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

    61040

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

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

    5.4K10

    巧用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 好了,经过上面的分析,本文就基本结束了,有兴趣可以下载源码多分析几个,或者创造几个动画效果,千万不要忘了告诉我,我可以加入到这个动画库中。

    72320

    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

    我的2017年总结笔记整理

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

    758110

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

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

    80830

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

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

    1.1K40

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

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

    92420

    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.3K50

    实现杂记(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.5K20

    属性动画 ValueAnimator 运行原理全解析

    那么到目前为止,我们能够确定,当动画第一次调用 start(),这里的第一次应该是指项目里所有的属性动画里某个动画第一次调用 start(),因为 AnimationHandler 是一个单例类,显然是为所有的属性动画服务的...大伙有时间可以去看看 AnimationFrameCallback 接口的 commitAnimationFrame() 方法注释,官方解释得特别清楚了,我这里就不贴图了,直接将我的理解写出来: 其实,...所以,这就是为什么需要对动画第一帧时间进行修正。 当然,如果动画已经开始了,在动画中间某一帧,就不会去修正了,这个修正,只是针对动画的第一帧时间。...二是,根据插值器计算得到的实际动画进度值,来映射到我们需要的数值。这么说吧,就算经过了插值器计算之后,动画进度值也只是 0-1 区间内的某个值而已。...VauleAnimatior运行原理时序图.png 最后,有一点想提的是,我们本篇只是过完了 ValueAnimator 的整个流程原理,但这整个过程中,注意到了没有,我们并没有看到有任何一个地方涉及到了

    2.1K91

    使用Canvas 实现一款图表插件(附带源码)

    则到 2pi 结束,起点为 -2pi 则到 0 结束。...基础运行设施配置好后,再拆分看功能,这次分为各个图表,耦合性几乎为 0,我们可以分别创建单独的开发文件,如果全挂载到 prototype 下文件就太长太长了,不是因为 Canvas 的特殊性才这样,其他插件亦是...坐标轴 要确定坐标轴的起始坐标点,x 轴开始点 ( 设置的间距 , Canvas 高度 - 间距 ) 和结束点 ( 宽度 - 间距 , 高度 - 间距 ),y 轴开始点 ( 间距 , 间距 ) 和结束点...3. x 轴上纵线 这里得需要起点坐标和终点坐标: 上一个点 (( Canvas 宽度/数据长度 )i+间距 , Canvas 高度 - Canvas 高度数值 [i]/总数值*峰值比 - 上间距 )...刚刚得到了一个下取整的数值,那么缓冲值可以计算为 speed*len-Math.floor(speed*len),取值范围是 1=>x>=0 可以设想从 a 点到 b 点,这段距离我们可以用 ( 到达坐标

    1.3K10

    《Motion Design for iOS》(四十六(最终章)

    如果我只是非常简单地淡出一个视图,我们直接使用基于block的UIView动画,因为它们的代码很少。...如果我在做一个指数延迟类型的动画(缓慢、平稳地移动到它的最终值而没有弹性)我喜欢JNWSpringAnimation设置不同属性时得到的动作感觉。...当你构建你自己的动画时,你可以选择任何对你来说工作得最好的。我希望我提供了一个很好的选择范围。 这是开始,不是结束 在这个指南中你学习了关于思考、设计和构建动画的基础。...我记得当我第一次进入动画开发并让我的第一个对象在屏幕上移动的时候,它完全使我震惊了。它真的改变了我,和我的工作。...那是2008年,在真正酷的弹簧动画框架出现之前,所以当时只是使用了简单的淡入淡出。

    19830

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券