【问题标题】:trigger ontouch event programmatically以编程方式触发 ontouch 事件
【发布时间】:2014-05-07 15:47:48
【问题描述】:

当我从 arduino(通过蓝牙)接收到特定字符串时,我想要做的是在我的活动的特定区域触发 ontouch 事件。我试图用wii和arduino构建一个控制器,以在我自己编写的游戏中使用。

在你回答这个问题之前,我已经知道有一个函数 * openButton.performClick();为此,但在游戏中我并不总是使用按钮,所以它不好。

我想模拟 adb 用猴子做的触摸,但没有 root 权限 像注入触摸只是没有根。

这是代码的一部分:

    int[] loc = new int[2]; 
    openButton.getLocationOnScreen(loc);// get the region where to simulate the //touch event
    xTest = (float)loc[0]; 
    yTest = (float)loc[1]; 



@SuppressLint("Recycle") void testing(){
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    float x = xTest;
    float y = yTest;


    int metaState = 0;
    MotionEvent motionEvent = MotionEvent.obtain(
        downTime, 
        eventTime, 
        MotionEvent.ACTION_UP, 
        x, 
        y, 
        metaState
    );
    dispatchTouchEvent(motionEvent);


}

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
     int action = event.getAction();
        switch (action & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_UP:
                // do something
                openButton.performClick();
                break;
            case MotionEvent.ACTION_MOVE:
                // do something
                // how to trigger a ACTION_DOWN event here?
                break;
    }

    return false;
}

所以我得到一个特定的字符串,我想在屏幕上的特定区域以编程方式模拟触摸事件,这次它是一个按钮,但它可能是其他东西,这就是为什么“view.performclick()”不好. 我已经看到了一些示例,他们在 dispatchTouchEvent 之前放置视图,如果我这样做,我会收到错误 提前感谢您的帮助

【问题讨论】:

    标签: android touch-event eventtrigger


    【解决方案1】:

    如果您使用的是 onTouchListener,onTouch(...) 方法是公开的,所以我想您可以调用它。

    因此,当您实例化 onTouchListener 时,将其存储为变量。

    OnTouchListener listener = new OnTouchListener() { [[override code etc.]]  }
    

    然后只需调用您已覆盖的 onTouch 方法,并为其提供您想要模拟触摸的视图和事件。

    MotionEvent 没有契约者,但有一个工厂方法,叫做 gain():

    MotionEvent myEvent = MotionEvent.obtain(long downTime, long eventTime, int action, float x, float y, int metaState);
    

    然后将其传递给您的 onTouch:

    onTouch(myView, myEvent);
    

    假设您已将正确的值传递给您的事件,它不会知道差异。

    有关 MotionEvent 和参数含义的更多信息,请访问:

    http://developer.android.com/reference/android/view/MotionEvent.html

    谢谢!

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2015-07-21
      • 2014-03-16
      相关资源
      最近更新 更多