說來說去都不如 畫圖示意 簡單易懂啊!!!真是的! 來吧~~先上張圖~~!
(一)首先明確一下 android 中的座標系統 :
(三)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軸上的偏移量。
此方法得到的該值會根據該行上的文字的多少而變化,並不是橫向上的像素大小;