view坐标:
相对于直接父view
left:view左上角横坐标
top:view左上角纵坐标
right:view右下角横坐标
bootom: view右下角纵坐标
获取到view的坐标值
2.在视图树绘制完成时候进行测量
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
需要注意的是,平时我们在执行动画的过程,不推荐使用 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 或是否全屏幕)。
相对于直接父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 或是否全屏幕)。