Android知识导图-view坐标系

来自 https://github.com/JunWeiUp/view


微博上有幸认识了GcsSloop,并给我提了非常好的意见,以后文章的干货一点会更多!

赫赫,好了该说正题了,view可以说是非常重要的,现在很多开发者只会去用,很难知道为什么要去这么做,一旦出了问题就Stack Overflow一下,这种程序员就是面向Stack Overflow编程 哈哈,好了 ,今天开始我会分几篇文章给大家讲解View的大部分基本原理。当你遇到嵌套,触摸冲突,自定义动画效果就不会害怕啦,这也是证明你通向Android高级开发工程师的第一步。

AndroidView体系是界面的核心,在这个系列中我分为多个章节陆续讲到 View坐标系、View的滑动机制、View的事件分发机制 、View的绘制流程 等等 来介绍Android View体系。 我们从最基础的坐标系开始!

1.View介绍

View是Android所有控件的基类,而且ViewGroup也是继承View的,下站图可以让大家更加直观的让大家了解View的体系.

2.坐标系

Android中分为两种Android坐标系和视图坐标系

(-) Android坐标系

Android坐标系还是比较简单的, 将屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向。

还是看图比较直观:(虽然是我百度的哈哈)

在MotionEvent中的getRawX()和getRawY()获取的坐标都是Android坐标系的坐标。

(二)视图坐标系

顾名思义 Android的屏幕是有限的 ,有时候view会很大,我们通过屏幕能看到的View大小称为视图,

我们还是直接看图吧!(哈哈)

View自身坐标如下方法可以获得View到其父控件(ViewGroup)的距离:

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

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

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

getBottom():获取View自身底边到其父布局顶边的距离MotionEvent提供的方法getX():获取点击事件距离控件左边的距离,即视图坐标

getY():获取点击事件距离控件顶边的距离,即视图坐标

getRawX():获取点击事件距离整个屏幕左边距离,即绝对坐标

getRawY():获取点击事件距离整个屏幕顶边的的距离,即绝对坐标今天就写到这里 ,如果那里有不明白的可以直接在评论回复!

祝大家过一个好的 5.1!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Android端的简易思维导图。可以保存数据。编辑树形图。建立模型主要模型结构相对简单:TreeModel,NoteModel,NoteView,TreeView。核心实现分布如下:2017-07-01TreeModel:树形结构的存储,树形结构的遍历,添加、删除节点;NoteModel:节点关联的指向,和Parent的指向;TreeView :绘制树形结构,对树形结构位置的纠正,实现View层的添加,删除,note关联绘制;NoteView:显示text;编写位置计算核心代码在核心代码中,我想和大家分享的是TreeView如何对多种Style(树形形状)进行适配的问题。因为我们的树形结构的表达多种的,有的是一个半树形图,有点是圆形展开的等。对于这个问题,作为程序员如何进行解耦能,采用Interface进行解构适配,统一行为。所以在这里我写了一个TreeLayoutManager进行管理树形的位置表达。这里我实现了一个RightTreeLayoutManager。代码概况如下:接口public interface TreeLayoutManager {     /**      * 进行树形结构的位置计算      */     void onTreeLayout(TreeView treeView);     /**      * 位置分布好后的回调,用于确认ViewGroup的大小      */     ViewBox onTreeLayoutCallBack();     /**      * 修正位置      *      * @param treeView      * @param next      */     void correctLayout(TreeView treeView, NodeView next); }实现public class RightTreeLayoutManager implements TreeLayoutManager{     final int msg_standard_layout = 1;     final int msg_correct_layout = 2;     final int msg_box_call_back = 3;     private ViewBox mViewBox;     private int mDy;     private int mDx;     private int mHeight;     public RightTreeLayoutManager(int dx, int dy, int height) {         mViewBox = new ViewBox();         this.mDx = dx;         this.mDy = dy;         this.mHeight = height;     }     @Override     public void onTreeLayout(final TreeView treeView) {         final TreeModel mTreeModel = treeView.getTreeModel();         if (mTreeModel != null) {             View rootView = treeView.findNodeViewFromNodeModel(mTreeModel.getRootNode());             if (rootView != null) {                 rootTreeViewLayout((NodeView) rootView);             }             mTreeModel.addForTreeItem(new ForTreeItem<NodeModel>() {                 @Override                 public void next(int msg, NodeModel next) {                     doNext(msg, next, treeView);                 }             });             //基本布局             mTreeModel.ergodicTreeInWith(msg_standard_layout);   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值