作者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/m.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