Android获取控件坐标为0的原因及取得控件位置和两控件距离的方法

来源:互联网 发布:dnf网络出现异常09 编辑:程序博客网 时间:2024/06/09 10:47

在onCreate的时候去取,肯定是0,因为那个时候UI还没有渲染完毕。

只能在你后续的注册的事件中调用方法。

getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标 

getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值,//获取在整个窗口内的绝对坐标 (不是很理解= =、)

getLeft , getTopgetBottomgetRight, 这一组是获取相对在它父亲里的坐标

问题来了,怎么获取两个控件的距离。

如果你给它命名了直接fvb,getLeft减一下就可以


如果你没给他命名

如果你是fragment,直接在它的view里getChildAt即可,如果你是Activity,那么你不能用setContenView了,必须获取到你当前整个布局的view,再去geiChildAt,至于具体怎么实现我暂时还没看,没空。


下面是我在view pager中获取的距离(前面说了,onCreate的时候不能获取)

mVpEmoji.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                if (dotDistance == 0.0) {                    ViewGroup vg = (ViewGroup) mRoot;                    ViewGroup vg2 = (ViewGroup) vg.getChildAt(1);                    View v1 = vg2.getChildAt(0);                    View v2 = vg2.getChildAt(1);                    dotDistance = v2.getLeft() - v1.getLeft();                }            }            @Override            public void onPageSelected(int position) {                //给那个dot一个属性动画,平移到对应第几个            }            @Override            public void onPageScrollStateChanged(int state) {            }        });


原创粉丝点击