【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的值就是此时点击图片的相对于图片左上角的
  //位置的值,如果我们两次点击图片的同一位置,即使图片在页面中显示的位置
  //不在同一个位置(滑动了),但是这两次获得到的值是相同的
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值