Android view层

 

当屏幕可以装下内容的时候,他们的值相等,只有当view超出屏幕后,才能看出他们的区别:getMeasuredHeight()是实际View的大小,与屏幕无关,而getHeight的大小此时则是屏幕的大小。当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的大小。
getHeight()是布局以后的屏幕高度
动态改变布局大小的方法:
LayoutParams lp = 控件ID.getLayoutParams();
lp.height = 320;(单位是像素)
控件ID.setLayoutParams(lp);
使用控件ID.setLayoutParams(lp)之后,还需要添加控件ID.requestLayout();

getMeasuredHeight : 表示的是view的实际大小。
getHeight: 表示的是view在屏幕上显示的大小

 

view 的left top  right bottom的坐标是相对于父亲容器的相对坐标。

width = right -left;

height = bottom - top;

left = view. getLeft();

right = view .getRight();

top = view.getTop();

bottom = view .getBottom();

 

x y 是view 左上角的坐标,translationX  translationY代表view相对于原始坐标(left ,top,right,bottom)的偏移量。

x = left + translationX   y = top + translationY   在view的平移过程中,原始坐标(left ,top,right,bottom)不会改变,改变的是,x,y,translationX,translationY。

motionEvent e.getX()  e.getY()返回的是相对于 点击view左上角的xy坐标,e.getRawX()  e.getRawY()返回的是相对于手机屏幕左上角的坐标。

velocityTracker在使用之前要设置计算时间,使用完之后要回收velocitytracker资源,(类似的用法类似)

 

mSrollX   mSrollY  单位是像素,只改变view 内容的位置不改变view本身在布局的位置,

mSrollX = view左边 - view 内容的左边  mSrollY = view上边 - view 内容上边(在view 的坐标系里

srollTo scrollBy 适用于对view 内容的滑动;动画适用于没有交互的view,复杂的动画效果;layoutparam 改变布局参数,操作复杂,但是适用于有交互的view。

点击事件分发过程由 dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个函数完成。

如果事件能传递到当前view,一定会调用dispatchTouchEvent方法

 

点击事件首先传递到根view group,它的dispatchTouchEvent就会被调用,如果此viewgroup 的 onInterceptTouchEvent方法返回true(表示要拦截当前事件),接着事件就会交给这个viewGroup来处理,即onTouchEvent方法会被调用。 如果onInterceptTouchEvent返回false表示不拦截当前事件,此事件就会继续传递到它的子元素,接着子元素的dispatchTouchEvent方法就会被调用,如此反复直至事件被最终处理。

 

posted @ 2018-11-12 11:13  polo2013  阅读(491)  评论(0编辑  收藏  举报