今天,在搞项目的时候遇到个小问题,我要在地图点击一个点,然后底部弹出一个信息窗,是的就是这么简单。但是我毕竟是个彩笔,所以遇到问题了,如果我把布局中的view先gone,然后在点击事件中visible出来,第一次会导致我的平移动画不执行,之后就正常了,这让我hin不爽,所以就自己想了个办法,来规避使用visible和gone这个比较low的方式,废话不多说,直接上方法。
第一步:记得加个flag判定是不是第一次加载这个控件,否则再次加载后也走这个方法,然后...就消失了再次。
/** * 监听控件,如果完成绘制,就根据获取到的高度,把控件通过Y轴移动到屏幕下方。 */ rlDeviceInfo.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if(firstLoad){ rlDeviceInfo.setTranslationY(rlDeviceInfo.getHeight()); firstLoad = false; } } });
第二步:动画代码,正常执行。
/** * 设备信息动画 */ public void showDeviceInfoAnimation(View view, boolean isShow) { if (isShow) { float height = rlDeviceInfo.getHeight(); ObjectAnimator animator = ObjectAnimator.ofFloat(rlDeviceInfo, "translationY", height, 0); animator.setDuration(1000); animator.start(); } else { float height = rlDeviceInfo.getHeight(); LogUtils.e("view窗口的height值: ---> " + height); ObjectAnimator animator = ObjectAnimator.ofFloat(rlDeviceInfo, "translationY", 0, height); animator.setDuration(1000); animator.start(); }其实问题倒不是很大,就是怕以后自己忘记,重走老路耽误时间精力,所以记下来,也方便其他朋友使用。