为什么在使用 setScaleX() 时,motionEvent.getX() 返回不一致的值?

2024-03-25

我的子视图驻留在 ViewGroup 中。 我想用捏来缩放(缩放)孩子。 我正在使用 setScaleX/Y() 来缩放孩子。比例是在 OnTouch() 中根据 2 个指针之间的距离计算的。 但是当我设置子级的比例时,它会使motionEvent.getX()不一致,这使得比例不一致:

case MotionEvent.ACTION_MOVE:
    p1.set(ev.getX(firstPointerIndex), v.getY(firstPointerIndex));
    Log.d(TAG,"Touch xy: " + ev.getX(firstPointerIndex) + "," +  ev.getY(firstPointerIndex));
    this.setScaleX(scale);
    this.setScaleY(scale);
    break;

Output

这是一个指针的输出:

12-09 11:55:14.828: D/IconItem(14408): Touch xy:54.622437, 135.79865
12-09 11:55:14.843: D/IconItem(14408): Touch xy:35.761047, 192.07361
12-09 11:55:14.863: D/IconItem(14408): Touch xy:54.669342, 135.65869
12-09 11:55:14.878: D/IconItem(14408): Touch xy:35.85121, 191.8046
12-09 11:55:14.898: D/IconItem(14408): Touch xy:54.715958, 135.51959
12-09 11:55:14.898: D/IconItem(14408): Touch xy:35.94078, 191.53735
12-09 11:55:14.913: D/IconItem(14408): Touch xy:54.776947, 135.33765

Question

问题在于 x 坐标处的跳跃 35-54 或 y 坐标处的跳跃 135-191。我不明白这些跳跃是从哪里来的。 当我不使用 setScaleX/Y() 时,ev.getX/T() 是一致的 - 没有跳跃。有人可以照亮我吗?我不应该使用这些缩放方法吗?它们会影响 ev.getX/Y() 吗?如何以其他方式实现视图的缩放(通过捏合)?


是的,每个运动事件都在视图的坐标中给出,同时考虑到视图的矩阵(依次包括比例)。您可以尝试通过进行缩放canvas.scale()而不是缩放视图,如理解多点触控 http://android-developers.blogspot.in/2010/06/making-sense-of-multitouch.html,或者可能通过在另一个视图中捕获 MotionEventsnot正在进行规模经营。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在使用 setScaleX() 时,motionEvent.getX() 返回不一致的值? 的相关文章

随机推荐