android座標相關的一些事

說來說去都不如 畫圖示意 簡單易懂啊!!!真是的! 來吧~~先上張圖~~!

 [android] <wbr>鈥溩賑澫喙氐囊恍┕適 <wbr>*Q*

(一)首先明確一下 android 中的座標系統 :

     屏幕的左上角是座標系統原點(0,0)
     原點向右延伸是X軸正方向,原點向下延伸是Y軸正方向
 
(二)關於Scroll: 屏幕顯示的內容很多時,會有超出一屏的情況,於是就產生了Scroll的概念。
 
      在View類中有個方法:
     getScrollY()  英文原文描述是:
      Return the scrolled top position of this view. This is the top edge of the displayed part 
      of your view....
      其實理解起來仍然就是:這個view相對於“座標系統原點”(見上圖)在Y軸上的偏移量.(getScrollX同理)
     【哇哈,有了圖就是好說明啊~ 省了多少語言描述啊,而且還不一定能說清楚~】
 

(三)MotionEvent類中 getRowX()和 getX()的區別:

      event.getRowX():觸摸點相對於屏幕原點的x座標
      event.getX():   觸摸點相對於其所在組件原點的x座標

 

     於是乎: view.getScrollY() + event.getY() 就得到了view中的觸摸點在Y軸上的偏移量

 

(四)TextView類中

       有個 getLayout()方法:the Layout that is currently being used to display the text. This

                               can be null if the text or width has recently changes.

       其返回類型是Layout ,也就是返回textView的佈局。

 

       然後重要的是通過這個 layout調用一個方法:

      getLineForVertical(int verticalPointPosition)  //得到某點在垂直方向上的行數值

 

       於是綜上所述,在實際的觸摸事件中可以這樣使用:

       Layout layout=textView.getLayout();

       int line = layout.getLineForVertical(textView.getScrollY() + (int) event.getY());

       //得到觸摸點在textView中垂直方向上的行數值。參數是觸摸點在Y軸上的偏移量

 

      接下來繼續介紹一個方法,要用到上邊的 layout 和 line:

      layout.getOffsetForHorizontal( line ,  (int) event.getX() );

      //得到觸摸點在某一行水平方向上的偏移量。

        參數分別是:該行行數值 和 觸摸點在該行X軸上的偏移量。

        此方法得到的該值會根據該行上的文字的多少而變化,並不是橫向上的像素大小; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章