gpt4 book ai didi

android - 检测触摸坐标是否在自定义 View 上可点击区域的坐标内

转载 作者:行者123 更新时间:2023-11-29 01:49:51 25 4
gpt4 key购买 nike

我正在尝试为我的应用创建一个带有可点击区域的自定义 View 。这些区域与将填充该 View 的图像像素坐标相关。我已将这些图像放在 drawable-nodpi 中以避免系统缩放。

我的自定义 View 采用其中一张图像,调整其大小以保持纵横比以适合其父级,然后将 View 调整为结果图像的大小。所以此时我有一个保持源比例的 View ,因此生成的 View 点击(onTouch event.getX 和 event.getY)坐标是相对于原始图像像素坐标的。

另一方面,我在 Activity 开始时加载的 xml 文件中拥有定义可点击区域的所有形状坐标。这些区域由一种类型定义:圆形或矩形。

圆:根据原始图像以 x-y 为中心,以 px 为单位的半径

rect:根据原始图像居中 x-y,宽度和高度以 px 为单位

现在我需要检测我的触摸 x-y 是否在任何这些区域的坐标内,但要记住我的原始图像受到的缩放。

如何检测触摸坐标和可点击区域坐标之间的“碰撞”?我的意思是,即使不调整原始图像的大小,我该如何计算?

最佳答案

我自己做了一个这样的View,

我添加了包含图像和 x/y 坐标的对象。

现在你需要有一个这些对象的列表,如果你得到一个 ontouchEvent,你迭代那个列表做一些像 objectHit() 的事情

public boolean objectHit(int x, int y){
int touchdistance = Math.sqrt((double)(this.getX()-x)*(double)(this.getX()-x)) + ((double)(this.getY()-y)*(double)(this.getY()-y));
return touchdistance <= this.getTouchableArea();
}

并且您以基本相同的方式为对象实现 getTouchableArea。

public double getTouchAbleArea() {
return Math.sqrt(Math.pow(getBitmap().getHeight(),2)+Math.pow(getBitmap().getWidth(),2))/2;
}

因此,您使用这段代码所做的是,确定触摸是否在表示对象的图像的大小范围内。

关于android - 检测触摸坐标是否在自定义 View 上可点击区域的坐标内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18835196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com