【问题标题】:Android How to detect swipe between two touch points on image viewAndroid如何检测图像视图上两个触摸点之间的滑动
【发布时间】:2017-06-10 17:27:13
【问题描述】:

我有一个 Imageview,上面有不同数量的接触点。它基本上是一个应用程序,它检测两个触摸点之间的滑动,并且不允许用户滑动任何其他点或向内或向外滑动。它应该限制用户只在两个触摸点之间滑动。

请看下图:

现在用户应该从点 1 开始滑动到点 2。如果滑动不是从起点 1 开始,它不应该为点 1 和点 2 之间的路径着色。

但是如果用户在点 1 和点 2 之间成功滑动,现在应该启用点 2 到 3 之间的滑动。因此,用户应该经过点 1 到 2、点 2 到 3、点 3 到 4、点 4 到点 5 才能完成第 1 轮。

请告诉我如何实现这个功能。我知道手势、手势叠加等,但它们都不适合我的情况,因为它们使用一般的触摸事件和手势方向。

请建议我实现这一点的方法,并记住我想让这个应用程序能够在所有类型的设备上运行,所以我可以简单地给出硬编码的 x,y 值。

编辑:按需 我在 Play Store 上发布了具有相同功能的应用程序链接,但我不知道他们是如何实现此功能的。

https://play.google.com/store/apps/details?id=al.trigonom.writeletters

【问题讨论】:

  • 好的。你不能使用 ontouchlistsner 吗?
  • 我可以,但我怎么能确定这些触摸点已被触摸,并且在这些触摸点之间滑动,实际上是在点 1 和 2 之间的那条线上
  • @Arslan 你知道其他方法吗
  • 如何在画布前使用手势和绘画
  • 我不想用那个,因为它没有检查点

标签: android android-gesture


【解决方案1】:

如果每个接触点都可以创建为单独的视图(例如ImageView),那么您可以创建一个inViewInBounds() 函数。 我使用来自here 的代码来创建需要检测多个imageViews 上的手指按压运动的代码:

Rect outRect = new Rect();
int[] location = new int[2];

//Determine if a touch movement is currently over a given view.
private boolean inViewInBounds(View view, int x, int y){
    view.getDrawingRect(outRect);
    view.getLocationOnScreen(location);
    outRect.offset(location[0], location[1]);
    return outRect.contains(x, y);
}

要使用此功能,在所有这些子触摸点的父视图上,设置 Click 和 Touch Listeners:

    //This might look redundant but is actually required: "The empty OnClickListener is required to keep OnTouchListener active until ACTION_UP"
    parentView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {}
    });
    //All the work gets done in this function:
    parentView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            int x = (int)event.getRawX();
            int y = (int)event.getRawY();
            // ** myTouchPoint might be an array that you loop through here...
            if ( inViewInBounds(myTouchPoint, x, y) ) doLogic(myTouchPoint);
            return false;
        }
    });

上面的代码仅显示检测您的一个视图何时被“触摸”。 如果没有“触摸”但视图处于“活动”状态(例如,当检测到触摸时,设置一个变量,如:viewLastTouched = myTouchPoint)然后你会调用类似drawingLine(viewLastTouched, x, y) 的函数——无论它需要做什么来绘制线和/或检测边界等。

【讨论】:

  • 我正在尝试做类似的事情,但是一旦您从 A 点滑动到 B 点,我需要查看用户是否保持手指握住 B 点。您有什么建议对于这样的事情?
【解决方案2】:

他们没有使用 android 本机 java 代码来构建这个应用程序。

应用程序正在使用此代码运行

import Runtime.MMFRuntime;
public class Main extends MMFRuntime {
}

这又来自https://github.com/ClickteamLLC/android/blob/master/docs/index.md

这用于打包使用 - http://www.clickteam.com/clickteam-fusion-2-5 编写的应用程序/游戏

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多