美文网首页Android开发Android技术知识程序员
Android坐标系、视图坐标系与触控事件(MotionEven

Android坐标系、视图坐标系与触控事件(MotionEven

作者: Android洋洋洋 | 来源:发表于2016-10-12 01:35 被阅读769次

    前言:本篇文章讲解Android坐标系、视图坐标系与触控事件(MotionEvent)

    一. Android 的坐标系:####

    在Android中,将屏幕左上角的定点座位Android坐标系的原点,从这个点向右是X轴得正方向,这个点向下为Y轴正方向:

    Android坐标系.png

    系统提供了getLocationOnScreen(intlocation[])这样的方法来获取Android坐标系中 点的位置,即该视视图左上角在Android坐标系中的坐标,另外在触控事件中使用getRawX().getRawY()方法所获取得坐标同样是Android坐标系中的坐标:

    getLocationOnScreen(intlocation[])方法:#####
    private int[] locationPoint = new int[2];
    //省略.....
    view.getLocationOnScreen(locationPoint);
    //省略.....
    sb.append("length :" + locationPoint.length + " -- ");
    for (int i : locationPoint) {
       sb.append(i + "--");
    }
    //结果:length : 0 -- 152 -- 
    //locationPoint[0]:为x该View在x轴得坐标,locationPoint=[1]为该View在Y轴的坐标
    
    在触控事件中使用getRawX() 与getRawY()方法:#####
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
    
    switch (ev.getAction()){
        case MotionEvent.ACTION_DOWN:
            downX = ev.getRawX();
            downY = ev.getRawY();
            break;
     }
    

    二.视图坐标系:####

    Android中还有一个视图坐标系,让是描述子视图在父视图中的位置。与Android坐标系比较相似的,视图坐标系是以子视图所在的父视图左上角为原点,该原点向右为X轴正方向,向下为Y轴正方向:
    在触控事件中,可使用 getX(), getY()方法获取得坐标即为视图坐标系中的坐标

    视图坐标2.png

    三.触控事件 MotionEvent:

    触控事件,见明知意;下面是MotionEvent中封装了一些常用的事件常量:

    //触控动作取消
    public static final int ACTION_CANCEL = 3;
    //单点触控按下动作
    public static final int ACTION_DOWN = 0;
    //触摸点移动动作
    public static final int ACTION_MOVE = 2;
    //触摸动作超出边界
    public static final int ACTION_OUTSIDE = 4;
    /** @deprecated */
    @Deprecated
    public static final int ACTION_POINTER_1_DOWN = 5;//多点触控按下动作
    /** @deprecated */
    @Deprecated
    public static final int ACTION_POINTER_1_UP = 6;//多点触控抬起动作
    /** @deprecated */
    @Deprecated
    public static final int ACTION_POINTER_2_DOWN = 261;
    /** @deprecated */
    @Deprecated
    public static final int ACTION_POINTER_2_UP = 262;
    

    通常会在onTouchEvent(MotionEvent event)或onInterceptTouchEvent(MotionEvent event)方法中通过event.getAction()获取触控事件类型 并进行对应逻辑处理

     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
     switch (ev.getAction()){
        case MotionEvent.ACTION_DOWN:
            downX = ev.getRawX();
            break;
        case MotionEvent.ACTION_MOVE:
            moveX = ev.getRawX();
            break;
        default:
            break;
    

    在触控事件时经常需要获取坐标值与相对距离等 进行了一下总结:

    View坐标与距离3.png

    View获取坐标的方法:
    getTop() : 获取该View顶边框到其父布局顶边的距离;
    getLeft() : 获取该View左边到框其父布局左边的距离;
    getRight() : 获取该View右边框到父布局左边的距离 ;
    getBottom : 获取该View底部边框到父布局顶部边框的距离;

    MotionEvent 获取坐标的方法:
    getX() : 获取事件点击位置所在控件左边的距离;
    getY() : 获取事件点击位置所在控件顶边的距离;
    getRawX() : 获取事件点击位置距离屏幕左边的距离;
    getRawY() : 获取事件点击位置距离屏幕顶边的距离;

    如有错误与建议感谢提出指正!!

    相关文章

      网友评论

        本文标题:Android坐标系、视图坐标系与触控事件(MotionEven

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