【发布时间】:2015-03-19 23:03:12
【问题描述】:
我的问题与this one 非常相似。 这个问题是大约 3 年前提出的,但尚未得到回答。
我的目标是使用系统覆盖捕获所有触摸事件(参见下面的代码),更改事件的参数(即 event.x = event.getX()+5)并将其传递给当前正在运行的应用程序(任何应用程序)。
目前,我可以使用 TYPE_PHONE 标志捕获所有 MotionEvent 或使用 TYPE_SYSTEM_OVERLAY 将所有事件传递给当前应用程序,但不能同时使用两者。
该应用程序用于辅助目的,因此使用任何辅助功能也是一种选择。
叠加服务的基本代码:
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
public class OverlayService extends Service {
OverlayView oView;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
oView = new OverlayView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.FILL_PARENT,
WindowManager.LayoutParams.FILL_PARENT,
WindowManager.LayoutParams.TYPE_PHONE, // TYPE_SYSTEM_OVERLAY
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER;
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(oView, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if(oView != null)
{
((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(oView);
oView = null;
}
}
}
class OverlayView extends View {
private Paint mLoadPaint;
public OverlayView(Context context) {
super(context);
setBackgroundColor(Color.BLUE);
getBackground().setAlpha(128);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(getContext(), "Touch", Toast.LENGTH_SHORT).show();
//********************** THIS IS WHERE I NEED YOUR HELP *************
}
return false;
}
}
任何建议将不胜感激。
【问题讨论】:
标签: android overlay accessibility motionevent