View的一些操作

1、view获取在屏幕上的位置

getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,获取在当前屏幕内的绝对坐标(该值从屏幕顶端算起,包括了通知栏高度)。 

getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值。

getLeft , getTop, getBottom, getRight,  这一组是获取相对在它父亲布局里的坐标。


如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些数据。


  1. button2.setOnClickListener(new OnClickListener() {  
  2.   
  3.     @Override  
  4.     public void onClick(View v) {  
  5.         int[] location = new int[2];  
  6.         v.getLocationOnScreen(location);  
  7.         x = location[0];  
  8.         y = location[1];  
  9.         Log.d("test""Screenx--->" + x + "  " + "Screeny--->" + y);  
  10.         v.getLocationInWindow(location);  
  11.         x = location[0];  
  12.         y = location[1];  
  13.         Log.d("test""Window--->" + x + "  " + "Window--->" + y);  
  14.               Log.d("test""left:" + v.getLeft());  
  15.               Log.d("test""right:" + v.getRight());  
  16.               Log.d("test""Top:" + v.getTop());  
  17.               Log.d("test""Bottom:" + v.getBottom());  
  18.               Log.d("test""Width:"+v.getWidth());  
  19.               Log.d("test""Height:"+v.getHeight());  
  20.     }  
  21. });

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);
    }
});


先普及一个知识,也是今天才学到的(太弱了,要恶补啊)

ViewTreeObserver

说白了就是一个view的监听器,监听view绘制前的状态,滚动状态,touch等等,具体的网上还是挺多的,再次不多说,一般用来获取控件大小,还有就是app程序开启有点啥动画的等等,具体网上搜搜吧

这三种方法,第一种相当于重写了onMeasure方法,你偶尔来一发,OK,但是控件如果多了,而且次数多了,内存不说,耗时啊~第二种我试试了这个回调一直在回调啊,不知道回调了多少次,算了果断关之,由于回调函数的方法onPreDraw()开始默认return false,没有改成ture,结果开始一直就看不到页面,悲哀的我,第三种,我只说三句话:好使,只调一次,推荐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值