我的目标是模拟屏幕上的触摸。我想保持简单,所以我没有将dispatchTouchEvent分配给任何视图,并让activity调用此方法。
我希望我的程序在固定的时间内触摸屏幕然后重复,所以我做了一个定时器和计时器任务来保存方法。
我打开了" Show touch trace"在开发者选项中,但我没有看到任何触摸痕迹。此方法返回的结果是false,我使用了日志来获取。你能为我的代码提供一些建议吗?哪里可能出错?谢谢!
我尝试在dispatchTouchEvent之前添加super或this,但它给了我一个错误。 :(
以下是代码:
Button button;
MotionEvent motionEvent;
@Override
public void onCreate(Bundle savedInstanceState) {
...
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
beginTimer();
}
});
//touch event
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
float x = 500.0f;
float y = 500.0f;
// List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
int metaState = 0;
motionEvent = MotionEvent.obtain(
downTime,
eventTime,
MotionEvent.ACTION_DOWN,
x,
y,
metaState
);
}
public void beginTimer() {
final Runnable setRunnable = new Runnable() {
public void run() {
dispatchTouchEvent(motionEvent);
Log.d("clickEvent", String.valueOf(dispatchTouchEvent(motionEvent)));
}
};
Timer timer = new Timer(true);
TimerTask task = new TimerTask() {
public void run() {
runOnUiThread(setRunnable);
}
};
timer.schedule(task, 1000, 1000);
}
非常感谢!!!