view的坐标

view坐标:
相对于直接父view
left:view左上角横坐标
top:view左上角纵坐标
right:view右下角横坐标
bootom: view右下角纵坐标

获取到view的坐标值

1.在onWindowFoucusChange()里面调用

	if(first){ //确保只会调用一次 
	  first=false;
	  final int[]location=new int[2];
	  mView.getLocationOnScreen(location);
	  //获取到view的坐标值
	  int x1=location[0];
	  int y1=location[1];
	}

2.在视图树绘制完成时候进行测量
	//添加对viiew视图树的监听
	mView.getViewTreeObserver().addOnGlobalLayoutListener(new 
		ViewTreeObserver().OnGolalLayoutListener{
		@Override
		public void onGlobalLayout(){
			//移除监听器,确保只会调用一次
			mView.getViewTreeObserver().removeGlobalLayoutListener(this);
			final int []location=new int[2];
			mView.getLocationScreen(location);
			int x1=location[0];
			int y1=location[1];
		}
		}
	);



View的getY(),getTranslationY()和getY()之间的联系
1.getY();
 返回的是视觉上的坐标,即眼睛看到的位置的Y坐标
2.getTranslationY();
 竖直方向上相对于top的偏移量,默认值为0;
 getY()=getTranslation()+getTop();由于getTranslation默认为0,所以一般清空下getY()==getTop();
 
3. View的getScrollY和View的ScrollTo()和ScrollBy()
 getScrollY()一般得到的值都为0
 
 scrollTo()和scrollBy();
 1.scrollTo()表示滑动到哪里的意思,scrollBy()表示相对于当前位置滑动了多少
 必须要注意的是两者都是对view的内容做滚动而不是对view本身做滚动.
 2.还有就是 scrollTo 和 scrollBy 函数的参数和坐标系是“相反的”,
 比如 scrollTo(-100,0)View的内容是向X轴正方向移动的.
 
 View的height与width
 动态设置view的height与width
	int width=50;
	int height=50;
	ViewGroup.LayoutParams layoutParams=view.getLayoutParams();
	if(layoutParams==null){
		layoutParams=new ViewGroup.LayoutParams(width,height);
	}else{
		layoutParams.height=height;
	}
	view.setLayoutParams(layoutParams); 


 需要注意的是,平时我们在执行动画的过程,不推荐使用 LayoutParams 来改变 View 的状态, 因为改变 LayoutParams 会调用 requestLayout() 方法,会标记 当前View 及 父容器, 同时逐层向上提交,直到 ViewRootImpl 处理该事件,ViewRootImpl 会调用三大流程, 从 measure 开始,对于每一个含有标记位的 view 及其 子View 都会进行测量、布局、绘制,性能较差
 因此我们如果在 api 14 以后 ,在动画执行过程中,要改变 View 的状态, 推荐使用 setTranslationY() 和 setTranslationX() 等方法, 而尽量避免改变 LayoutParams.因为性能来说较差。
 
 event.getY()和event.getRawY()
 在 public boolean onTouch(View view, MotionEvent event) 中, 当你触到控件时,x,y 是相对于该控件 左上点(控件本身)的相对位置。  而 rawx, rawy 始终是相对于屏幕的位置。getX() 是表示 Widget 相对于自身左上角的 x坐标, 而 getRawX() 是表示相对于屏幕左上角的x坐标值  (注意: 这个屏幕左上角是手机屏幕左上角,不管 Activity 是否有 TitleBar 或是否全屏幕)。
 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值