我們先看下Android中的坐標(biāo)系:分為兩種忍宋,第一種是Android坐標(biāo)系咧党,第二種是View坐標(biāo)系俗或。
先看第一種坐標(biāo)系市怎,Android坐標(biāo)系。它是將屏幕左上角的頂點(diǎn)作為Android坐標(biāo)系的原點(diǎn)辛慰,這個原點(diǎn)向右是X軸正方向区匠,向下是Y軸正方向。
getRawX()個getRawY()方法獲得的 坐標(biāo)也是Android坐標(biāo)系的坐標(biāo)帅腌。
第二種坐標(biāo)系是View坐標(biāo)系驰弄,與第一種坐標(biāo)系是共同存在的。
中間的實(shí)心矩形速客,我們當(dāng)做是觸摸點(diǎn)戚篙。
????? getRawX()獲得的是點(diǎn)擊事件距離整個屏幕左邊的距離,也叫作絕對坐標(biāo)溺职;
?????? getRawY()獲得是點(diǎn)擊事件距離整個屏幕距離整個屏幕定邊的距離岔擂,也就是絕對坐標(biāo);
?? ??? getX(): 獲取點(diǎn)擊事件距離控件左邊的距離浪耘,也就是視圖坐標(biāo)乱灵;
?????? getY():獲取點(diǎn)擊事件距離控件頂部的距離,也就是視圖坐標(biāo)点待;
?????? getTop():獲取View自身頂邊到其父控件頂邊的距離阔蛉。
?????? getLeft():獲取View自身左邊到其父布局左邊的距離。
????? getRight():獲取View自身右邊到其父布局左邊的距離癞埠。
?????? getBottom():獲取View自身底邊到其父布局頂邊的距離状原。
另外介紹兩個方法: getWidth()和getHeight()方法;分別是獲取View的寬和高度苗踪。其實(shí)這個方法內(nèi)部也就是坐標(biāo)點(diǎn)之間的距離颠区。
View的滑動:當(dāng)點(diǎn)擊事件傳到View時,系統(tǒng)記下觸摸點(diǎn)的坐標(biāo)通铲,手指一動后記錄下移動后的觸摸點(diǎn)的坐標(biāo)并算出偏移量毕莱,通過偏移量來修改View的坐標(biāo)。另外實(shí)現(xiàn)View滑動的方法有很多颅夺,今天我們先說一下layout()朋截;
我們知道View的繪制過程中,會調(diào)用layout()吧黄,而layout()方法內(nèi)部會調(diào)用onLayout()方法來顯示位置部服。所以我們只要修改了View的top,bottom拗慨,right廓八,left屬性就可以控制View的坐標(biāo)奉芦。
我們看下View的onTouchEvent
首先我們獲取了手指觸摸點(diǎn)的橫坐標(biāo)和縱坐標(biāo)。在手指按下的時候賦值剧蹂;當(dāng)觸摸移動的時候記錄移動的偏移量声功,調(diào)用layout方法重新擺放位置。
直接在布局中可以使用這個自定義的View宠叼,運(yùn)行之后我們在手機(jī)屏幕上可以拖動此view到任何的位置先巴。
PS: 這里最好是做一下限制,將View距離父控件左邊的位置大于等于0冒冬;而距離父控件頂部也是大于等于0筹裕;距離父控件左邊小于等于屏幕寬度;距離父控件頂部小于等于屏幕的高度窄驹;不然這個view可以滑動到屏幕外,就不是我們想要看到的效果了证逻。