前言

Android View体系是界面编程的核心,他的重要性不亚于Android四大组件,在这个系列中我会陆续讲到View坐标系、View的滑动、View的事件分发等文章来逐步介绍Android View体系。

1.View简介

View是Android所有控件的基类,同时ViewGroup也是继承自View,看下面这张图我们就会有一个直观的了解:

知道了View的层级关系有助于对View的理解,从上图可以发现我们常用的这些控件都是继承于View,如果我们更好的掌握了View的知识体系,那么我们在界面编程时则会更加的得心应手。

2.Android坐标系

Android中有两种坐标系,分别为Android坐标系和视图坐标系,首先我们先来看看Android坐标系。
在Android中,将屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向。

在下文讲到的MotionEvent提供的getRawX()和getRawY()获取的坐标都是Android坐标系的坐标。

3.视图坐标系

要了解视图坐标系我们只需要看懂一张图就可以了:

View获取自身宽高

  • getHeight():获取View自身高度

  • getWidth():获取View自身宽度
    View自身坐标
    通过如下方法可以获得View到其父控件(ViewGroup)的距离:

  • getTop():获取View自身顶边到其父布局顶边的距离

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

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

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

MotionEvent提供的方法
我们看上图那个深蓝色的点,假设就是我们触摸的点,我们知道无论是View还是ViewGroup,最终的点击事件都会由onTouchEvent(MotionEvent event)方法来处理,MotionEvent也提供了各种获取焦点坐标的方法:

  • getX():获取点击事件距离控件左边的距离,即视图坐标
  • getY():获取点击事件距离控件顶边的距离,即视图坐标
  • getRawX():获取点击事件距离整个屏幕左边距离,即绝对坐标
  • getRawY():获取点击事件距离整个屏幕顶边的的距离,即绝对坐标

跟随滑动

   int mLastY = 0;        cardview.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent event) {                switch (event.getAction()) {                    case MotionEvent.ACTION_DOWN:                        mLastY = (int) (view.getY() - event.getRawY());                        break;                    case MotionEvent.ACTION_MOVE:                        view.animate()                                .y(event.getRawY() + mLastY)                                .setDuration(0)                                .start();                        break;                    default:                        return false;                }                return true;            }        });

转载自:https://blog.csdn.net/itachi85/article/details/50708391

更多相关文章

  1. padding与margin的区别
  2. Android(安卓)View视图系统分析和Scroller和OverScroller分析
  3. 关于Android(安卓)popupWindow的位置显示 showAtLocation理解
  4. 使用Android(安卓)OpenGL ES 2.0绘图之二:定义形状
  5. openGL ES学习教程 ---基本图像绘制
  6. Android(安卓)View体系总结
  7. Android(安卓)滑动scrollBy()和scrollTo()两个方法的简单认识
  8. Android(安卓)笔记38: BAIDU MAP API GPS数据定位偏移校正
  9. 对Android(安卓)中坐标系的理解

随机推荐

  1. Android(安卓)Apk 代码混淆与资源文件混
  2. Android(安卓)Studio——Android(安卓)Bi
  3. Android(安卓)sqlite存储日期类型
  4. Android(安卓)Toolbar左、中、右对齐
  5. 在Ubuntu 上搭建Android(安卓)内核编译环
  6. Activity四种启动模式(android:launchMode
  7. Java 集合类 List 的那些坑
  8. 【Android】布局
  9. Android两种不同的方法去实现图像的放大
  10. Android(安卓)-Intent -ACTION_