- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Canvas ,我在上面设置了一条路径
Path path = new Path();
path.moveTo(1, 1);
path.lineTo(90, 1);
path.lineTo(90, 60);
path.lineTo(1, 60);
canvas.drawPath(path,p);
现在我想为这个路径对象实现一个触摸监听器。
我已经在自定义 ImageView 上实现了缩放选项,并在这个自定义 ImageView 的 onDraw 方法中在 Canvas 上绘制了这条线。所以我不能通过检查用户触摸的坐标来做到这一点。
我知道路径对象不是 View 类的子对象,因此我无法在其中实现 touchListner。但我真正需要的是类似
path.setOnTouchListener(myTouchListner);
有人知道如何实现吗?任何帮助表示赞赏。
最佳答案
没有这样的东西。Path 只是一个数据结构,你如何使用它(绘制,剪辑,......)与它无关。触摸事件也是如此。
你只需要用触摸坐标做一些数学运算。这是一个使用矩阵的二维变换。你可以阅读这个 on wikipedia .
首先你应该将触摸点映射到缩放/平移坐标,看看here , here和 here .
我没有测试但是如果你有一个 ImageView 这个方法应该做的:
final float[] getPointerCoords(ImageView view, MotionEvent e)
{
final int index = e.getActionIndex();
final float[] coords = new float[] { e.getX(index), e.getY(index) };
Matrix matrix = new Matrix();
// invert compute the inverse transformation matrix
view.getImageMatrix().invert(matrix);
// this adjust the panning
matrix.postTranslate(view.getScrollX(), view.getScrollY());
// this apply the inverse transformation to your touch points
// which should give you the coordinates on your imageview
matrix.mapPoints(coords);
return coords;
}
我无法告诉您这是否适合您开箱即用,因为我不知道您对 Path 有何用途,我只能假设您使用它在图像上绘图。如果在绘制路径之前应用任何其他转换,则应改用应用到路径的转换。
如果您在 Canvas 上进行这些转换,您可以像这样提取矩阵:
Matrix matrix = canvas.getMatrix()
另一种方法是将矩阵值提取到数组中并自己进行计算:
// Get the values of the matrix
// create this array in a field an reuse it for performances
float[] values = new float[9];
matrix.getValues(values);
values[2]
和 values[5]
是转换元素左上角的 x,y
坐标,无论缩放系数values[0]
和 values[4]
分别是转换元素的宽度和高度的缩放因子。如果您放大相同的因子,则它们应该是相同的值。当您最终将触摸点转换为 Path
坐标系时,您可以使用 this 检查它是否在 Path 内其他人已经在您的问题的评论中建议的方法。
if (path.contains(coordX, coordY)) {
// inside
} else {
// outside
}
您是唯一知道您正在使用的代码以及路径坐标系在您的 View 中如何转换的人,因此也是唯一知道如何正确将其转换回来的人。所以不要将此答案视为插入式代码。我只是给你指明了方向。打印一些触摸坐标/转换的日志可能有助于在您开发时进行调试。
祝你好运。
关于android - 将 touchListener 添加到路径对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861990/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!