Android 安卓:如何镜像你的触摸?(视觉指针问题)

Android 安卓:如何镜像你的触摸?(视觉指针问题),android,view,touch,draw,mirror,Android,View,Touch,Draw,Mirror,我的平板电脑指针有问题。我正在设计一款艺术应用程序,我正试图找出如何反映我的运动对称性。当前,如果您用手指或手写笔触摸屏幕,则会绘制一个以编程方式生成的圆圈,并将其自身更新到您移动手指/手写笔的任何位置。这很好用。但现在我想添加两个新特性:水平对称和垂直对称。因此,如果选择“水平对称”,另一个指针将出现在相反的X位置,但沿相同的Y轴。因此,如果在300x,250y处触摸,另一个指针将与原始指针一起在屏幕上显示在-300x,250y处。现在,当我尝试应用和测试它时,我仍然只得到原始指针。以下是我到

我的平板电脑指针有问题。我正在设计一款艺术应用程序,我正试图找出如何反映我的运动对称性。当前,如果您用手指或手写笔触摸屏幕,则会绘制一个以编程方式生成的圆圈,并将其自身更新到您移动手指/手写笔的任何位置。这很好用。但现在我想添加两个新特性:水平对称和垂直对称。因此,如果选择“水平对称”,另一个指针将出现在相反的X位置,但沿相同的Y轴。因此,如果在300x,250y处触摸,另一个指针将与原始指针一起在屏幕上显示在-300x,250y处。现在,当我尝试应用和测试它时,我仍然只得到原始指针。以下是我到目前为止的情况:

rLO.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction() & MotionEvent.ACTION_MASK) {

        case MotionEvent.ACTION_DOWN:               

            // Hardware accelerated at runtime
            getWindow().setFlags(
                    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
                    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
            cursor.x = (int)event.getX() - (cursor.radius / 2);
            cursor.y = (int)event.getY() - (cursor.radius / 2);
            cursor.onDraw(cursor.e);
            rLO.addView(cursor);

            if (hSym > 0) {
                vSym = 0;
                cursorH.x = -cursor.x;
                cursorH.y = cursor.y;
                cursorH.onDraw(cursorH.e);
                rLO.addView(cursorH);
            }

            if (vSym > 0) {
                hSym = 0;
                cursorV.x = cursor.x;
                cursorV.y = -cursor.y;
                cursorV.onDraw(cursorV.e);
                rLO.addView(cursorV);
            }
            break;

        case MotionEvent.ACTION_MOVE:
            // Hardware accelerated at runtime
            getWindow().setFlags(
                    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
                    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

            //update pointer to new position of stylus/finger
            cursor.x = (int)event.getRawX() - (cursor.radius / 2);
            cursor.y = (int)event.getRawY() - (cursor.radius / 2);
            rLO.removeView(cursor);
            rLO.addView(cursor);

            if (hSym > 0) {
                cursorH.x = -cursor.x;
                cursorH.y = cursor.y;
                rLO.removeView(cursorH);
                rLO.addView(cursorH);
            }

            if (vSym > 0) {
                cursorV.x = cursor.x;
                cursorV.y = -cursor.y;
                rLO.removeView(cursorV);
                rLO.addView(cursorV);
            }
            break;

        case MotionEvent.ACTION_UP:
            if (vSym > 0 || hSym > 0) {
                rLO.removeView(cursorH);
                rLO.removeView(cursorV);
            }
            rLO.removeView(cursor);

            break;
        } // end switch 
注:
我在代码中用游标这个词来表示指针。指针光标是以编程方式从创建圆的不同类中绘制的。

它可能正在工作,但问题是屏幕的左上角是0,0。任何负面位置都不在屏幕上。相反,将屏幕宽度或高度分成半个镜像。

我之前已经解决了这个问题。在使用symetry代码之前,我通过将屏幕的宽度和高度分别除以2,重新计算了0,0的位置。我还添加了两个文本视图,它们将在位置改变时不断更新,以查看我的视图是否仍然工作良好。但是我会测试你说的,因为我可能在计算原始的屏幕设置,而不是为新指针修改的屏幕设置。