gpt4 book ai didi

android - 以编程方式触发ontouch事件

转载 作者:行者123 更新时间:2023-11-30 02:54:28 25 4
gpt4 key购买 nike

我想做的是当我从 arduino(通过蓝牙)接收到特定字符串时,在我的 Activity 的特定区域触发一个 ontouch 事件。我试图构建一个带有 wii 和 arduino 的 Controller ,用于我自己编写的游戏。

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

我想模拟触摸,就像 adb 用猴子做的那样,但没有 root 权限像 inject touch 之类的东西只是没有根。

这是部分代码:

    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 之前他们放置了 View ,如果我这样做我会得到一个错误 预先感谢您的帮助

最佳答案

如果您使用的是 onTouchListener,则 onTouch(...) 方法是公共(public)的,因此我想您可以调用它。

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

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

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

MotionEvent 没有承包商,但有一个名为 obtain() 的工厂方法:

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

谢谢!

关于android - 以编程方式触发ontouch事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23522449/

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