在你回答之前,我已经知道有一个函数 * 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;
}
所以我得到一个特定的字符串我想在屏幕上的特定区域以编程方式模拟toucht事件,这次是一个按钮,但它可能是其他的原因" view.performclick()& #34;不好。 我已经看到一些例子,在dispatchTouchEvent之前他们放置了视图,如果我这样做我得到一个错误 提前感谢您的帮助
答案 0 :(得分:1)
如果你正在使用onTouchListener,onTouch(...)方法是公开的,所以我想你可以调用它。
因此,当您实例化onTouchListener时,将其存储为变量。
OnTouchListener listener = new OnTouchListener() { [[override code etc.]] }
然后只需调用您已覆盖的onTouch方法,并为其提供您想要模拟触摸的视图和事件。
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
谢谢!