Android自定義View你所要知道的(一):座標系

準備寫自定義View這個專欄的文章,從最基礎的座標系到Demo。本着鞏固自身知識的意願,不足之處還請大家多多包涵。
之所以要先掌握Android的座標系,因爲view是靠座標來確定它在屏幕當中的位置。瞭解Android的座標系後,將會對的View的佈局有一定的概念感。

首先Android中以屏幕的左上角爲原點座標(0,0);

需要值得注意的是,以原點爲中心。Y軸向下爲正,向上則爲負。X軸和數學裏面一樣,左負,右正。

View提供獲取座標的方法:
這裏寫圖片描述
getLeft()
view自身左邊距離父ViewGroup左邊的距離
getTop()
view自身頂部距離父ViewGroup頂部的距離
getRight()
view自身右邊距離父ViewGroup左邊的距離
getBottom()
view自身底部距離父ViewGroup頂部的距離
getX()
view自身左邊距離父ViewGroup左邊的距離
getY()
view自身頂部距離父ViewGroup頂部的距離
getX(),getY()和getTop(),getLeft()意義都一樣。不同的是,getX()和getY()返回的數據類型是float,距離更加精確。
最初看見getRight()和getBottom()兩方法是還有點蒙,感覺跟字面意不一樣。通過view所提供的座標方法,可以求出View最後的實際寬高。

width = getRight() - getLeft();

height = getBottom()-getTop();

MotionEvent(觸摸事件 )也提供獲取座標方法:

getX()
點擊事件距離view自身左邊的距離,相對座標。
getY()
點擊事件距離view自身頂部的距離,相對座標。
getRawX()
點擊事件距離屏幕左邊的距離,絕對座標
getRawY()
點擊事件距離屏幕頂部的距離,絕對座標

兩種獲取座標的方式有着不同的意義和使用場景,接着來說一說自定義View中的Layout方法。
說之前大家可以想象一下,下拉刷新時候的場景。
這裏寫圖片描述
分爲Header,Content,Footer和包裹這三個View的ViewGroup。默認情況下,Content填滿整個屏幕可見區域。在下拉和上拉的時候,header和footer才慢慢的出來。
前面我們說到Android中以屏幕的左上角爲原點座標(0,0),而Content的佈局就是原點到屏幕底部這塊區域。Header的佈局則是在原點之上,Footer佈局則是在屏幕底部之下。所以默認情況下只能看見Content區域,通過滑動實現下拉刷新,上拉加載。

layout方法中有4個參數,就是確定View的佈局位置和View的最終寬高
layout(getLeft,getTop,getRight,getBottom);
效果圖中的三個View的佈局參數,則爲:

header.layout(0,-(header. getMeasuredHeight()),screenWidth,0);

content.layout(0,0,screenWidth,screenHeight);

footer.layout(0,screenHeight,screenWidth,screenHeight+footer. getMeasuredHeight())

這樣就是現實了默認Content可見,header和footer 分別位於於頂部和底部。
做了一個小Demo,可以下載下來看一看。只是實現了佈局和滑動,後續會完善。
這裏寫圖片描述
github地址:https://github.com/yangjiechina/PullRefreshDemo

發佈了37 篇原創文章 · 獲贊 25 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章