一:滑动的产生原因
滑动一个View原理:就是通过不断的改变View的坐标。
实现View的滑动,必须监听用户触摸的事件,根据触摸传入的坐标,动态的改变View的坐标,从而实现滑动
Android的坐标系:Android中屏幕的最左上端的点就是原点,向右就是X坐标轴的正方向,向下就是Y坐标轴的正方向
系统提供的getLocationOnScreen(intlocation[])方法获取Android坐标系中位置 触控事件中的getRawX 和getRawY方法实 现同样效果
视图坐标系:相对于Android坐标系,视图坐标系主要描述子View在父 View中的位置,将父视图 左上角作为坐标原点。触控事件中getX getY可以获取View的视图坐标系
触控事件:
常用到的:单点触摸、单点触摸离开屏幕、触摸点移动
public static final int ACTION_DOWN = 0;
public static final int ACTION_UP = 1;
public static final int ACTION_MOVE = 2;
通常会在onTouchEvent(MotionEvent event)中通过event.getAction()方法获取触控事件的类型。
常用获取坐标的方法:
(1)View提供的获取坐标的方法
getTop:获取当前View自身的顶边到父布局顶边的距离
getLeft:获取当前View自身的左边到父布局左边的距离
getRight:获取当前View自身的右边到父布局右边的距离
getBottom:获取当前View自身的底边到父布局底边的距离
(2)触控事件MotionEvent中提供的方法
getX:视图坐标 点击事件到控件左边的距离
getY:视图坐标
getRawX:Android坐标 点击事件距离屏幕左端的距离
getRawY:Android坐标
二.实现滑动的七种方法
第一种:layout方法
采用getX,getY
// 视图坐标方式
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取触控点的坐标
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录触摸点坐标
lastX = x;
lastY = y;
break;
case MotionEvent.ACTION_MOVE:
// 计算偏移量
int offsetX = x - lastX;
int offsetY = y - lastY;
// 在当前left、top、right、bottom的基础上加上偏移量
layout(getLeft() + offsetX,
getTop() + offsetY,
getRight() + offsetX,
getBottom() + offsetY);
//同时对left和right进行偏移
<