Android: как отразить прикосновение?(проблема с визуальным указателем) - PullRequest
0 голосов
/ 20 января 2012

У меня проблема с указателем на планшете.Я создаю художественное приложение и пытаюсь понять, как отразить мое движение (симметрию).В настоящее время, если вы касаетесь экрана пальцем или стилусом, изображение (программно созданный круг) рисуется и обновляется, куда бы вы ни двигали пальцем / стилусом.Это работает отлично.Но теперь я хочу добавить две новые функции: горизонтальную и вертикальную симметрию.Поэтому, если вы выберете горизонтальную симметрию, другой указатель появится в противоположной позиции 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 

ПРИМЕЧАНИЕ: Я использовал слово «курсор» в коде для «указатель».Указатель (курсор) программно рисуется из другого класса, который создает круг.

1 Ответ

0 голосов
/ 20 января 2012

Возможно, это работает, но проблема в том, что верхний левый угол вашего экрана (0,0).Любая отрицательная позиция за пределами экрана.Вместо этого разделите ширину или высоту экрана на половину зеркала.

...