1. 程式人生 > >Android的座標系及獲取View的座標方法

Android的座標系及獲取View的座標方法

android中有兩種座標系,分別稱之為Android座標系和檢視座標系。
我們經常在自定義View,在測量和繪製時會用到這些,只有我們弄清楚它們才能保證不出錯。下面我們來談談它們的定義及區別吧。

一、Android座標系和檢視座標系
(1)Android座標系
先來看一看Android座標系是個什麼樣子的。貼一張圖來說明,如下:
這裡寫圖片描述

     如上圖所示,Android座標系以手機螢幕左上角的頂點為座標原點,從該點向右為x軸正方向,從該點向下為y軸正方向。而觸控事件中,使用getRawX()和getRawY()方法

獲取的座標就是以這個座標系為標準下的座標值。
(2)檢視座標系
這裡寫圖片描述

如上圖所示,檢視座標系是以父檢視的左上角為座標原點的。相應的原點向右為x軸正方向,原點向下為y軸正方向。在觸控中,通過
getX()和getY()來獲取的座標值就是檢視座標系中的座標值。

二、獲取座標值以及相對距離的那些方法
在android中,提供了非常豐富的方法來獲得座標值和相對距離。但是在使用這些方法的時候,一定要清楚是以哪個座標系為標準來獲取的。
為了將這些方法一一說明清楚,我也準備了一張圖,如下:
這裡寫圖片描述

上面的那張圖很好的說明了每個方法獲得的座標值或者距離都是從哪裡到哪裡的。說明一下,圖中有三個黑色的框框,最外層的是手機螢幕,
中間層的是ViewGroup,最內層的是ViewGroup中放置的view。
其實上圖中標註的方法可以分為兩類,一類是View提供的方法,一類是MotionEvent提供的方法。分別說明如下:
View提供的獲取的座標以及距離的方法:
getTop() 獲取到的是view自身的頂邊到其父佈局頂邊的距離
getLeft() 獲取到的是view自身的左邊到其父佈局左邊的距離
getRight() 獲取到的是view自身的右邊到其父佈局左邊的距離
getBottom() 獲取到的是view自身底邊到其父佈局頂邊的距離
getY() 和getTop()一樣
getX() 和getLeft()一樣

int[] location = new int[2] ; // 儲存view的絕對座標值
view.getLocationInWindow(location); // 獲取在當前視窗內的絕對座標
view.getLocationOnScreen(location);// 獲取在整個螢幕內的絕對座標

MotionEvent提供的方法:
getX() 獲取點選事件距離控制元件左邊的距離,即檢視座標
getY() 獲取點選事件距離控制元件頂邊的距離,即檢視座標
getRawX() 獲取到的是點選事件距離整個螢幕左邊的距離,即絕對座標
getRawY() 獲取到的是點選事件距離整個螢幕頂邊的距離,即絕對座標

相關推薦

Android座標系獲取View座標方法

android中有兩種座標系,分別稱之為Android座標系和檢視座標系。 我們經常在自定義View,在測量和繪製時會用到這些,只有我們弄清楚它們才能保證不出錯。下面我們來談談它們的定義及區別吧。 一、Android座標系和檢視座標系 (1)And

Android 座標系動畫移動座標相關集合

Android座標系 說到Android座標系其實就是一個三維座標,Z軸向上,X軸向右,Y軸向下。這三維座標的點處理就能構成Android豐富的介面或者動畫等效果,所以Android座標系在整個Android介面中算是蓋樓房的尺寸草圖,下面我們就來看看這些相關的概念。 2-1 Android

Android 3種座標系View在各座標系獲取自身座標方法View的滑動和scroll方法

注:理解View獲取自身座標或者說位置的各種方法重點在於考慮該方法獲取到的座標是相對於3種座標系中的哪種。 Android 3種座標系 Android 3種座標系都是以右、下方向為直角座標系x、y軸的正方向。此文介紹的都是二維直角座標系,不考慮

android onCreate中獲取view寬高為0的多種解決方法

  這個問題大家肯定遇到過不止一次,其實很簡單,解決它也很容易,但是咱們追求的畢竟不是解決它,而是找到幾種方法去解決,並且這麼解決的原理是什麼。   這裡列出4種解決方案: Activity/View#onWindowFocusChanged   這個函式

Android 開發中獲取View檢視的寬和高的幾種方法

一、根據WindowManager管理器獲得 1)這兩種方法在螢幕未顯示的時候,還是處於0的狀態,即要在setContentView呼叫之後才有效。 2)Activity必須如此設定才能獲得view

iOS沙盒文件夾獲取路勁方法

雜誌 str doc contents 緩存 ask type domain sea iPhone沙盒中有四個文件夾,分別是:documents、tmp、app、library. 1、Documents :用戶生成的文檔或數據,或者應用不能重新新創建的數據,存儲在/Docu

express中的路由規則獲取請求引數方法

express中常見的路由規則 主要使用的路由規則是get和post兩種,即 var express = require('express'); var app = express(); app.get(); // get和post兩種請求方式 app.post();

Android應用自定義View繪製方法手冊

背景 這篇遲遲難產的文章算是對2015前半年的一個交代吧,那時候有一哥們要求來一發Android Canvas相關總結,這哥們還打賞了,實在不好意思,可是這事一放就給放忘了,最近群裡小夥伴催著說沒更新部落格,坐等更新啥的,隨先有這麼一篇Android應用開發超

usb滑鼠驅動註解獲取滑鼠座標

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h

androidView座標系view獲取自身座標方法和點選事件中座標獲取

在做一個view背景特效的時候被座標的各個獲取方法搞暈了,幾篇抄來抄去的部落格也沒弄很清楚。 現在把整個總結一下。 其實只要把下面這張圖看明白就沒問題了。 涉及到的方法一共有下面幾個: view獲取自身座標:getLeft(),getTop(),getRigh

GetPathFromUri4kitkat【Android 4.4 kitkat以上以下根據uri獲取路徑的方法

under als providers textview href 數據權限 res activit nload 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 前言 在Android4.4之前和之後,通過Intent調用文件管理器選擇文件,獲取的文件uri地址形

Android座標系以及獲取座標系方法

概括:Android中有兩種座標系(Android座標系和檢視座標系)。下面將介紹這兩種座標系以及在座標系中獲取對應的座標值的一些方法。 Android座標系和檢視座標系 1)Android座標系 所謂的Android座標系就是以手機螢幕左上角為原點,從該點水平向右為X軸,從該點水平向下

Android 擷取View獲取View的Bitmap的方法

需求 使用者在一個Layout中編輯文字和圖片。當用戶點選儲存按鈕時,需要將layout裡的所有view以一張圖片的形式儲存並顯示。 這篇文章主要說的是如何獲取View的Bitmap。bitmap的儲存和顯示不在此文討論。 方案一:使用系統API

Android--獲取View的寬高的幾種方法

1、getHeight()無效 我們先來看看在 onCreate() 中用控制元件的 getHeight() 和 getWidth() 方法會出現什麼情況。 public class MainActivity extends AppCompatActiv

Android獲取View寬高方法

Android開發中經常需要獲取控制元件的寬高,比如前不久我在寫一個圖片載入庫時,因為需要對Bitmap進行裁剪就遇到了需要獲取ImageView寬高的問題。 如果稍微瞭解過一下View的繪製過程,就會知道直接在onCreate()等生命週期回撥方法中獲取寬高,獲取到的值是0

Android 根據座標獲取控制元件方法

/** * 根據座標獲取相對應的子控制元件<br> * 在Activity使用 * * @param x座標 * @param y座標 * @return 目標V

Mac系統Android Studio獲取除錯版開發版SHA1方法

除錯版: 1.直接在Android Studio工程中開啟Terminal: 2.輸入keytool -list -v -keystore ~/.android/debug.keystore 回車

android在程式碼中獲取view寬/高為0解決方法

在專案中,我們要在程式碼中獲取view的寬高資訊,有可能就會在onCreat或者onResume方法中去獲取,原因就是view的measure過程與Activity的生命週期不是同步執行的,因此無法保證在onCreat,onResume,onStart時這個vi

Android mac地址獲取方法小結可能出現的問題

     這段時間專案遇到個問題,客戶把移動裝置回廠修理後再安裝我們的專案,執行會報錯。後來經過我仔細排查發現一個很詭異的問題,就是無法獲取mac地址了。於是我仔細把獲取mac地址的一些資料看了看,加上一些除錯,總算是解決了這個問題。現在決定把這塊小結下,以免再次遇到問題。

Android ViewTreeObserver使用總結獲得View高度的幾種方法

ViewTreeObserver 註冊一個觀察者來監聽檢視樹,當檢視樹的佈局、檢視樹的焦點、檢視樹將要繪製、檢視樹滾動等發生改變時,ViewTreeObserver都會收到通知,ViewTreeObserver不能被例項化,可以呼叫View.getViewTre