Передайте TouchEvent вновь созданному SurfaceView

Можно ли передать событие касания вновь созданному SurfaceView в проекте Android 4.0.3.

Позвольте мне уточнить.

Я создал собственный OnTouchListener, который обрабатывает входящие события. Событие ACTION_DOWN создает пользовательский экземпляр SurfaceView и добавляет его поверх всех других представлений (это работает нормально). Теперь SurfaceView должен обрабатывать ACTON_MOVE и уведомлять прослушиватель о ACTION_UP. Исходный OnTouchListener следует удалить после добавления SurfaceView.

Я пытался передать TouchEvent с помощью dispatchTouchEvent, но это работает, только если я делаю это постоянно. Можно ли реализовать описанное поведение и как лучше всего это сделать?

С уважением и спасибо.

Вот код:

TouchListener:

OnTouchListener onTouchListener = new OnTouchListener() {


    public boolean onTouch (View v, MotionEvent event) {

        int action = event.getAction();

        switch (action) {

        case MotionEvent.ACTION_DOWN:
            surfaceView = new CustomSurfaceView(this.getActivity(), drawer);
            surfaceView.setZOrderOnTop(true);
            surfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT);

            overlayContainer.addView(surfaceView);
            btnView.setOnTouchListener(null);

            return surfaceView.dispatchTouchEvent(event);;

        default:
            return false;
        }
    }
};


btnView.setOnTouchListener(onTouchListener);

Вид поверхности:

@Override
public boolean onTouchEvent (MotionEvent event) {

    switch (action) {

    case MotionEvent.ACTION_MOVE:

        x = (int) event.getX();
        y = (int) event.getY();

        return true;

    case MotionEvent.ACTION_UP:

        // TODO:notify Listener
        return true;


    default:
        return false;
    }
}

person BauerMitFackel    schedule 22.10.2012    source источник
comment
Пожалуйста, включайте код в свои вопросы, когда это возможно, так люди с большей вероятностью смогут дать вам качественные ответы.   -  person Sheena    schedule 22.10.2012


Ответы (1)


просто передайте touchevent вновь созданному объекту. Внутри этого объекта вы должны проверить, готова ли поверхность или нет. Передайте true, если он был готов, чтобы внешний класс также мог вернуть true и т. д.

Всегда пропускайте сенсорные события вниз по лестнице, никогда не позволяйте им возникать там.

person NikkyD    schedule 22.10.2012
comment
Должен ли я постоянно передавать события ACTION_MOVE в SurfaceView с помощью dispatchTouchEvent в моем пользовательском OnTouchListener или есть лучший способ избежать этого? - person BauerMitFackel; 22.10.2012
comment
на моем samsung s2, если я провожу пальцем по экрану, сенсорное событие (перемещение) выпускается каждые 4 пикселя движения. Таким образом, пользователь перемещает палец по дисплею, происходит много событий касания, и ДА, вы должны передать их все классу, который в них нуждается. - person NikkyD; 23.10.2012