关于View体系

一、视图坐标
分别为Android坐标系和视图坐标系。
1.Android坐标系
将屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向,getRawX()和getRawY()获取的坐标都是Android坐标系的坐标。
2.视图坐标系
描述的是子视图在父视图中的位置。(如图)
在这里插入图片描述
视图坐标系是以父视图的左上角为坐标原点的。相应的原点向右为x轴正方向,原点向下为y轴正方向。在触控中,通过getX()和getY()来获取的坐标值就是视图坐标系中的坐标值。
View提供的获取的坐标以及距离的方法:
getTop() 获取到的是view自身的顶边到其父布局顶边的距离getLeft() 获取到的是view自身的左边到其父布局左边的距离getRight() 获取到的是view自身的右边到其父布局左边的距离getBottom() 获取到的是view自身底边到其父布局底边的距离 MotionEvent提供的方法:
getX() 获取点击事件距离控件左边的距离,即视图坐标getY() 获取点击事件距离控件顶边的距离,即视图坐标getRawX() 获取到的是点击事件距离整个屏幕左边的距离,即绝对坐标getRawY() 获取到的是点击事件距离整个屏幕顶边的距离,即绝对坐标。

二、实现 View 滑动的六种方法

  1. 使用layout的方法;
  2. 使用offsetLeftAndRight()与offsetTopAndBottom();
  3. 使用LayoutParams();
  4. 使用scrollTo()与scrollBy();
  5. 使用Scroller类
  6. 使用属性动画
    1.使用layout的方法使用onLayout的方法可以试着view的位置,那么我们就可以通过改变left,right,top,bottom来使View移动,结合MontionEvent来实现view跟着手指的滑动移动。
 @Override
    public boolean onTouchEvent(MotionEvent event) {
        //使用getx,getY实现view移动
A:
//        int x = (int) event.getX();
//        int y = (int) event.getY();
        //使用getrawx,rawY,实现移动;
        int rawX = (int) event.getRawX();
        int rawY = (int) event.getRawY();
  switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
B:
//                lastX = x;
//                lastY = y;
/                lastX = rawX;
                 lastY = rawY;
                break;
   case MotionEvent.ACTION_UP:
                break;
            case  MotionEvent.ACTION_MOVE:
C:
//                int offsetX = x - lastX;
//                int offsetY = y - lastY;
                  int offsetX = rawX-lastX;
                  int offsetY = rawY-lastY;
                // layout(getLeft()+offsetX,getTop()+offsetY,getRight()
             //          +offsetX,getBottom()+offsetY);
// layout(getLeft()+offsetX,getTop()+offsetY,getRight()+offsetX,getBottom()+offsetY);
D:
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值