1、view获取在屏幕上的位置
getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值。
getLeft , getTop, getBottom, getRight, 这一组是获取相对在它父亲布局里的坐标。
如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些数据。
- button2.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- int[] location = new int[2];
- v.getLocationOnScreen(location);
- x = location[0];
- y = location[1];
- Log.d("test", "Screenx--->" + x + " " + "Screeny--->" + y);
- v.getLocationInWindow(location);
- x = location[0];
- y = location[1];
- Log.d("test", "Window--->" + x + " " + "Window--->" + y);
- Log.d("test", "left:" + v.getLeft());
- Log.d("test", "right:" + v.getRight());
- Log.d("test", "Top:" + v.getTop());
- Log.d("test", "Bottom:" + v.getBottom());
- Log.d("test", "Width:"+v.getWidth());
- Log.d("test", "Height:"+v.getHeight());
- }
- });
2、android 获取控件的大小
三种方法:
第一种
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); imageView.measure(w, h); int height =imageView.getMeasuredHeight(); int width =imageView.getMeasuredWidth();
第二种
ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); return true; } });
第三种
ViewTreeObserver vto2 = imageView.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } });
先普及一个知识,也是今天才学到的(太弱了,要恶补啊)
说白了就是一个view的监听器,监听view绘制前的状态,滚动状态,touch等等,具体的网上还是挺多的,再次不多说,一般用来获取控件大小,还有就是app程序开启有点啥动画的等等,具体网上搜搜吧
这三种方法,第一种相当于重写了onMeasure方法,你偶尔来一发,OK,但是控件如果多了,而且次数多了,内存不说,耗时啊~第二种我试试了这个回调一直在回调啊,不知道回调了多少次,算了果断关之,由于回调函数的方法onPreDraw()开始默认return false,没有改成ture,结果开始一直就看不到页面,悲哀的我,第三种,我只说三句话:好使,只调一次,推荐