作者RX1226 (NO KING)
看板AndroidDev
标题[问题] 模拟点击悬浮View上的位置
时间Wed Jan 2 18:38:54 2019
板上的大大们您好
小弟想做一个悬浮视窗
最小化回到桌面
可以移动到特定位置
然後按下按钮後会在该位置模拟点击动作
会点击到萤幕上的对应位置
现况与问题描述:
目前悬浮视窗和模拟点击都做了可以Work
在自己的APP下按下模拟点击可以点到特定位置
但是在最小化APP後模拟点击的部分却无法触发该位置的点击
在输出Log後发现点击事件有触发
但是没办法传递到萤幕上的元件
程式码如下:
Button btn_click = dialog_control.findViewById(R.id.btn_click);
btn_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//取得目标位置在萤幕上的座标
int[] location = new int[2];
dialog_target.getLocationOnScreen(location);
//有取得正确座标, 执行模拟点击时无法触发画面上的元件
simulateTouchEvent(dialog_target, location[0], location[1]);
}
});
其中dialog_control是控制的View, dialog_target是悬浮的目标视窗
想要模拟点击dialog_target位置下的元件
不知道是否是点击方式选错了, 或是需要特别的权限
先谢谢大大的指引了
发现少贴了simulateTouchEvent
立马补上
private void simulateTouchEvent(View view, float x, float y) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, metaState);
view.dispatchTouchEvent(motionEvent);
MotionEvent upEvent = MotionEvent.obtain(downTime+1000, eventTime+1000,
MotionEvent.ACTION_UP, x,y, metaState);
view.dispatchTouchEvent(upEvent);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.23.68.54
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1546425537.A.CA9.html
1F:推 lonelytea: 不用权限 setOnClickListener没错 你去看simulateTouch 01/02 21:34
2F:→ lonelytea: 是否执行正确 01/02 21:35
3F:→ RX1226: 我来研究看看, 谢谢lonelytea大大的方向指引! 01/03 10:26
※ 编辑: RX1226 (211.23.68.54), 01/03/2019 12:07:24
4F:→ RX1226: 发现现在卡在点击事件无法传递到萤幕上的特定位置 01/03 12:08
5F:→ beyondthe: 不是在自己的 app 应该没权限吧 01/03 19:09
6F:→ RX1226: 我在研究看看, 谢谢大大们的建议 01/04 10:39