【Android】点击图片获取点击位置在图片中的位置

需求

在一个页面中,有一张图片展示,这个页面是一个可滑动页面,但是当点击到这个图片里面的位置的时候,我们需要获取到这个点击位置在图片的哪个位置,即获取到点击点与图片当前的相对位置。

分析

我们在屏幕上可以通过 MotionEvent 获取到点击屏幕时的当前的X和Y的位置,但是这个位置是整个屏幕的位置,是以屏幕左上角为原点坐标的相对位置,但我们需要的是点击位置相对于图片的相对位置,因为页面可以滑动,所以当页面滑动之后,我们再点击相对于图片上的位置跟原来相同的点,但是根据屏幕获取到X和Y的位置也会变,所以我们需要获取的X和Y应该是相对于图片的左上角的原点的相对位置。

举个例子

当图片在页面的下部显示的时候,我们点击图片的中心位置,此时通过MotionEvent 获取的坐标是(X1,Y1),但是当图片滑动到页面的上部的时候,还是点击图片的中心位置,此时通过 MotionEvent 获得的坐标是(X2,Y2),两次我们点击的都是图片的中心位置,但是这个(X1,Y1)绝对不等于(X2,Y2),那需要怎么解决这个问题呢?需要我们更改这个坐标原点,因为我们这两次获取的值的坐标原点都是相对屏幕来说的,我们需要把这个坐标原点修改为相对于这张图片。

解决方案
imageView.post {
    val location = IntArray(2)
    imageView.getLocationOnScreen(location)
    
    //图片左上角此时在屏幕中的X位置
    val screenX = location[0]
    //图片左上角此时在屏幕中的Y位置
    val screenY = location[1]
  
  //接下来只要使用 MotionEvent 减去这个值就好了
  newX = event.x - location[0]
  newY = event.y - location[1]
  //这个时候获取到的newX和newY的值就是此时点击图片的相对于图片左上角的
  //位置的值,如果我们两次点击图片的同一位置,即使图片在页面中显示的位置
  //不在同一个位置(滑动了),但是这两次获得到的值是相同的
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 06:22:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 06:22:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 06:22:01       87 阅读
  4. Python语言-面向对象

    2024-06-07 06:22:01       96 阅读

热门阅读

  1. electron录制工具-准备录制mask

    2024-06-07 06:22:01       28 阅读
  2. 一些关于科技的想法

    2024-06-07 06:22:01       33 阅读
  3. 使用docker直接运行不同版本nodejs命令

    2024-06-07 06:22:01       36 阅读
  4. Centos7安装Docker和DockerCompose

    2024-06-07 06:22:01       30 阅读
  5. PostgreSQL的视图pg_stat_database

    2024-06-07 06:22:01       31 阅读
  6. Open MV 人眼识别和瞳孔识别

    2024-06-07 06:22:01       33 阅读
  7. PostgreSQL的视图pg_locks

    2024-06-07 06:22:01       30 阅读
  8. python里装饰器的作用是什么

    2024-06-07 06:22:01       27 阅读
  9. mysql 索引和null值的关系

    2024-06-07 06:22:01       31 阅读
  10. 15、数据资产评估指导意见

    2024-06-07 06:22:01       28 阅读
  11. Leetcode.866 回文质数

    2024-06-07 06:22:01       31 阅读
  12. Python重试

    2024-06-07 06:22:01       27 阅读