Java AlertDialog dispatchTouchEvent

Java AlertDialog dispatchTouchEvent,java,android,view,android-alertdialog,touch-event,Java,Android,View,Android Alertdialog,Touch Event,我想将motionevent从视图传输到对话 我尝试了AlertDialog.dispatchTouchEvent,但这不起作用,事件只是在我的视图中停止,不再继续 代码: final View v=新视图(该视图); v、 setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级)); final WindowManager.LayoutParams params=新建WindowManager.Lay

我想将motionevent从视图传输到对话

我尝试了AlertDialog.dispatchTouchEvent,但这不起作用,事件只是在我的视图中停止,不再继续

代码:

final View v=新视图(该视图);
v、 setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级));
final WindowManager.LayoutParams params=新建WindowManager.LayoutParams();
params.format=PixelFormat.半透明;
params.width=WindowManager.LayoutParams.MATCH\u父项;
params.height=WindowManager.LayoutParams.MATCH\u父项;
params.packageName=getPackageName();
getWindowManager().addView(v,参数);
v、 setOnTouchListener(新的OnTouchListener(){
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u UP){
d、 getButton(DialogInterface.BUTTON_负值).setText(否);
d、 getButton(DialogInterface.BUTTON_正值).setText(是);
}否则{
int[]pos=新的int[2];
按钮b=d.getButton(DialogInterface.Button_负值);
int w=b.getWidth();
inth=b.getHeight();
b、 getLocationOnScreen(pos);
if(event.getRawX()pos[0]&&event.getRawY()pos[1]){
b、 setText(是);
d、 getButton(DialogInterface.BUTTON_正值).setText(否);
}否则{
b、 setText(否);
d、 getButton(DialogInterface.BUTTON_正值).setText(是);
}
}
返回d.dispatchTouchEvent(事件);
//返回false;
}
});
d-我要传输MotionEvent的对话框。。。
对否-带文本的字符串

我正在制作类似触摸事件代理的东西…视图放置在窗口顶部…捕获所有触摸事件并将它们传输到应用程序…您可以调试您的
OnTouchListener
实现吗?@EugenMartynov是的,我可以调试…但是为什么?它似乎工作正常…所以您说即使是传递给对话框。然后,最可能的问题是,该事件的坐标甚至应该调整,以便由对话框正确处理。同样,事件可能会发送到对话框,但(x,y)坐标可能/应该调整,以便正确处理。假设50,50坐标点与对话框视图中的点不同,因为对话框的左上角与视图不同。
        final View v = new View(this);
        v.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        params.format = PixelFormat.TRANSLUCENT;
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.MATCH_PARENT;
        params.packageName = getPackageName(); 
        getWindowManager().addView(v,params);
        v.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v,MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_UP) {
                    d.getButton(DialogInterface.BUTTON_NEGATIVE).setText(no);
                    d.getButton(DialogInterface.BUTTON_POSITIVE).setText(yes);
                } else {
                    int[] pos = new int[2];
                    Button b = d.getButton(DialogInterface.BUTTON_NEGATIVE);
                    int w = b.getWidth();
                    int h = b.getHeight();
                    b.getLocationOnScreen(pos);
                    if(event.getRawX() < pos[0] + w && event.getRawX() > pos[0] && event.getRawY() < pos[1] + h && event.getRawY() > pos[1]) {
                        b.setText(yes);
                        d.getButton(DialogInterface.BUTTON_POSITIVE).setText(no);
                    } else {
                        b.setText(no);
                        d.getButton(DialogInterface.BUTTON_POSITIVE).setText(yes);
                    }
                }
                return d.dispatchTouchEvent(event);
                //return false;
            }
        });