我们先看下Android中的坐标系:分为两种,第一种是Android坐标系,第二种是View坐标系。

先看第一种坐标系,Android坐标系。它是将屏幕左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,向下是Y轴正方向。

getRawX()个getRawY()方法获得的 坐标也是Android坐标系的坐标。

Android自定义view中的layout()_第1张图片 Android坐标系

第二种坐标系是View坐标系,与第一种坐标系是共同存在的。

Android自定义view中的layout()_第2张图片 View坐标系

中间的实心矩形,我们当做是触摸点。

      getRawX()获得的是点击事件距离整个屏幕左边的距离,也叫作绝对坐标;

       getRawY()获得是点击事件距离整个屏幕距离整个屏幕定边的距离,也就是绝对坐标;

       getX(): 获取点击事件距离控件左边的距离,也就是视图坐标;

       getY():获取点击事件距离控件顶部的距离,也就是视图坐标;

       getTop():获取View自身顶边到其父控件顶边的距离。

       getLeft():获取View自身左边到其父布局左边的距离。

      getRight():获取View自身右边到其父布局左边的距离。

       getBottom():获取View自身底边到其父布局顶边的距离。

另外介绍两个方法: getWidth()和getHeight()方法;分别是获取View的宽和高度。其实这个方法内部也就是坐标点之间的距离。

View的滑动:当点击事件传到View时,系统记下触摸点的坐标,手指一动后记录下移动后的触摸点的坐标并算出偏移量,通过偏移量来修改View的坐标。另外实现View滑动的方法有很多,今天我们先说一下layout();

我们知道View的绘制过程中,会调用layout(),而layout()方法内部会调用onLayout()方法来显示位置。所以我们只要修改了View的top,bottom,right,left属性就可以控制View的坐标。

我们看下View的onTouchEvent

Android自定义view中的layout()_第3张图片 重写了onTouchEvent

首先我们获取了手指触摸点的横坐标和纵坐标。在手指按下的时候赋值;当触摸移动的时候记录移动的偏移量,调用layout方法重新摆放位置。

直接在布局中可以使用这个自定义的View,运行之后我们在手机屏幕上可以拖动此view到任何的位置。

PS: 这里最好是做一下限制,将View距离父控件左边的位置大于等于0;而距离父控件顶部也是大于等于0;距离父控件左边小于等于屏幕宽度;距离父控件顶部小于等于屏幕的高度;不然这个view可以滑动到屏幕外,就不是我们想要看到的效果了。

更多相关文章

  1. Android 坐标系及动画移动坐标相关集合
  2. Android 自定义View之坐标系(一)
  3. android坐标系相关知识点
  4. Android中的坐标系统
  5. android中的坐标系以及获取坐标的方法
  6. Android OnTouchListener实时监听触点坐标,需要同时监听OnClickLi
  7. Android坐标系、视图坐标系与触控事件(MotionEvent)
  8. Android:解决RadioGroup中RadioButton的图片自定义及每项间隔距离
  9. android线性布局控件之间的距离设置

随机推荐

  1. android - ViewPager 监听左右滑动
  2. Error: Error parsing D:\android-sdk-w
  3. OpenMax在Android上的实现
  4. android图形化学习1
  5. 认识Android手机--来自MIUI
  6. Android启动过程(转)
  7. NDK编译:fatal error: GLES2/gl2platform.
  8. SystemUI 下拉栏快捷键隐藏(一)
  9. android在只拥有第三方apk的情况下在自己
  10. Android数据存储的方法