第3章 View的事件体系

一、View基础

View的位置参数:

参数:top,left,right,bottom
           x,y,translationX,translationY(android3.0之后)
四个顶点确定:top(左上纵坐标)、left(左上横坐标)、right(右下横坐标)、bottom(右下纵坐标)。相对于父容器来说的。
View的位置坐标和父容器的关系:
得出View的宽高和坐标的关系:
width  = right - left
heigth = bottom - top
Left = getLeft();
Right = getRight();
Top = getTop();
Bottom = getBottom();
 
x和y:View左上角的坐标
translationX和translationY:左上角相对于父容器的偏移量
x = left + translationX
y = top + translationY
 
MotionEvent:
ACTION_DOWN、ACTION_MOVE、ACTION_UP。
getX/getY:当前View左上角的x和y左边
getRawX/getRawY:相对于手机屏幕左上角的x和y坐标
 
TouchSlop:
系统所能识别的被认为是滑动的最小距离。
获取方式:ViewConfiguration.get(getContext()).getScaledTouchSlop();
 
VelocityTracker:
速度追踪,追踪手指滑动过程速度
 
GestureDetector:
手势检测,辅助检测用户单击,滑动,长按,双击等行为。
 
Scroller:
弹性滑动对象,和View的computeScroll方法配合使用完成View的弹性滑动。
 
二、View滑动
实现View滑动的方法:
1、View本身提供的scrollTo/scrollBy方法;
     scrollBy(int x ,int y):它是相对于当前位置的相对滑动
     scrollTo(int x ,int y):它是基于传递参数的绝对滑动
     只能滑动View的内容,不能滑动View本身。
2、View平移效果;
      使用动画平移,动画并不能改变view真正的位置参数,如果希望动画结束之后的状态得到保留需设置fillAfter属性为true。
      动画的平移之后3.0以下版本无法响应新位置的click事件。
3、动态改变布局参数,即LayoutParams。
 
三、View和ViewGroup事件分发
点击事件的事件分发涉及到的方法:
dispatchTouchEvent:事件传递给当前View,该方法一定会执行;
onInterceptTouchEvent:是否拦截某个事件;
onTouchEvent:处理点击事件;
这里注意View没有onInterceptTouchEvent方法,一旦事件交给它会执行onTouchEvent方法。
三者伪代码关系
public boolean dispatchTouchEvent(MotionEvent ev){
  boolean consume =false;
  if(onInterceptTouchEvent(ev)){
    consume = onTouchEvent(ev);
  }else{
    consume = child.dispatchTouchEvent(ev);
  }
  return consume;
}

 

ViewGroup的事件传递是从ViewGroup传递给子元素。
View如果设置OnTouchListenter,那么onTouch方法被回调,返回true,onTouchEvent会被调用。onTouchEvent方法中,如果设置OnClickListener,
它的onClick会被调用。
优先级,OnTouchListenter>onTouchEvent>OnClickListener。
 
滑动冲突的解决方法:
1、外部拦截法(推荐);  
      在父容器的onInterceptTouchEvent方法里内部拦截,ACTION_DOWN事件父容器返回False不拦截,否则ACTION_MOVE和ACTION_UP都直接给
      父容器处理,ACTION_UP返回false不拦截。
2、内部拦截法;
      重写子容器的dispatchTouchEvent的方法,让父容器拦截ACTION_MOVE和ACTION_UP事件,即调用父容器的
      parent.requestDisallowInterceptTouchEvent(true)。
 
   



posted @ 2016-02-18 16:23  咖啡馆的水果拼盘  阅读(172)  评论(0编辑  收藏  举报