美文网首页
Android View相关

Android View相关

作者: 不若艳阳 | 来源:发表于2016-06-12 22:05 被阅读18次

首先,什么是View?在Android中,几乎所有的控件都继承自View,他是绝大部分控件的基类。包括常用的Button、TextView等以及RelativeLayout、LinearLayout等都是View,当然后者应当更加属于ViewGroup。ViewGroup内部是可以存在子View的,当然这个子View也还是可以是ViewGroup。

一、View位置相关
  View的位置由他四个顶点坐标决定,分别是top、left、right、bottom,其中需要注意的是top和bottom分别是左上角和右下角的纵坐标,而left和right分别是左上角和右下角的横坐标。


View的位置坐标和父容器的关系

  他们直接的关系为:width=right - left,height = bottom - top。从3.0开始,View增加了几个额外的参数,分别是x、y、translationX和translationY,其中x、y分别是View的左上角坐标,translationX和translationY分别是View左上角相对于父容器的偏移量。
二、MotionEvent和TouchSlop
  MotionEvent中比较重要的是:ACTION_DOWN(手指接触屏幕)、ACTION_MOVE(手指在屏幕上移动)、ACTION_UP(手指从屏幕上松开的一瞬间)。
  可以通过MotionEvent可以得到点击事件的x和y坐标,getX/getY返回相对于View左上角的x和y坐标,getRawX/getRawY得到相对于屏幕左上角的x和y坐标。
  TouchSlop是系统中最小滑动量,不同设备下可能不同。我们可以通ViewConfiguration.get(getContext()).getScaledTouchSlop()来获取这个值。当滑动距离小于这个值时,系统可以认为并没有发生滑动事件,我们也可以通过这个值来过滤一部分用户可能发生的误操作。
三、手势和滑动
  Velocity,追踪速度。用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度。

        VelocityTracker tracker = VelocityTracker.obtain();
        tracker.addMovement(event);
        //当我们想知道当前的滑动速度时,我们直接使用以下方法
        tracker.computeCurrentVelocity(1000);
        int xV = (int)tracker.getXVelocity();
        int yV = (int)tracker.getYVelocity();

需要注意的是,当你的手指从右往左滑动的时候,水平方向为负值,从下往上滑动也是同理。最后在不用的时候我们依旧还是需要调用clear方法来重置并回收内存。

  tracker.clear();
  tracker.recycle();

GestureDetector,手势检查。用于辅助检测用户的点击、滑动、长按、双击等基础行为。使用过程参考如下

  //先创建一个GestureDetector对象,并且实现OnGestureListener接口,
  //也可以根据需要实现OnDoubleTapListener从而能监听双击行为
  GestureDetector mDetector = new GestureDetector(this);
  //解决长屏幕后无法拖动现象
  mDetector.setInsLongpressEnabled(false);
  //接着接管目标View的onTouchEvent方法,在待监听View的onTouchEvent方法中添加如下实现:
  boolean consume = mDetector.onTouchEvent(event);
  return consume;

未完待续...

相关文章

网友评论

      本文标题:Android View相关

      本文链接:https://www.haomeiwen.com/subject/wmtydttx.html