最近由于需要,希望可以得到触摸点在android机上屏幕的位置,于是乎,查了一些资料,感觉这个比较通俗易懂

,所以呢,就保存下来,也希望和大家一起分享一下!

说来说去都不如 画图示意 简单易懂啊!!!真是的! 来吧~~先上张图~~!

(一)首先明确一下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轴上的偏移量。

此方法得到的该值会根据该行上的文字的多少而变化,并不是横向上的像素大小;

更多相关文章

  1. Android仿百度外卖自定义下拉刷新效果
  2. 创建点对点WiFi直连——翻译自developer.android.com Training
  3. android接口回调的两中简单写法
  4. 应该是史上最全最新Java和Android面试题目(自己总结和收集的)
  5. android面试2
  6. 吐血总结 2020 Android(安卓)实习面经
  7. activity使用theme.dialog且activity中有dialog时按返回按钮dial
  8. android根据经纬度查询位置名称
  9. android 坐标相关

随机推荐

  1. Android上鲜为人知的UI控件介绍和使用
  2. Android(安卓)Studio初学习体会
  3. android语音识别技术
  4. Android开发技巧:动态创建UI界面
  5. Android(安卓)关机流程分析-----(2)JNI和ke
  6. 如何使用命令行编译运行cocos2d-x的andro
  7. Android——四种AterDialog
  8. android:paddingLeft与android:layout_ma
  9. 创建和使用Android(安卓)library工程
  10. [Android] 基于 Linux 命令行构建 Androi