什么?你还在用visible和gone来控制View的显示与隐藏?

    今天,在搞项目的时候遇到个小问题,我要在地图点击一个点,然后底部弹出一个信息窗,是的就是这么简单。但是我毕竟是个彩笔,所以遇到问题了,如果我把布局中的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();
    }
其实问题倒不是很大,就是怕以后自己忘记,重走老路耽误时间精力,所以记下来,也方便其他朋友使用。

你可能感兴趣的:(自定义控件)