Android setOnLongClickListner не работает с событием onTouch - PullRequest
3 голосов
/ 08 октября 2010

У меня есть изображение, которое можно перетаскивать и масштабировать, но теперь мне также нужно установить setOnLongClickListner в моем изображенииЯ сделал это, но это не работает.но когда я отключил событие ontouch, оно начало работать.Кто-нибудь может сказать мне, пожалуйста, как это исправить.вот мой код

    image.layout(0, 30, screenWidth, screenHeight - 30);
    image.setScaleType(ImageView.ScaleType.FIT_XY);


    params = new RelativeLayout.LayoutParams(screenWidth, screenHeight - 30);
    params.leftMargin = 0;
    params.topMargin = 30;


    layout.addView(image, params);

    image.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {


            Log.i("its working", "its working");

            return true;
                    }
    });

    image.setOnTouchListener(this);

я буду очень благодарен.

спасибо большое.

Ответы [ 4 ]

2 голосов
/ 09 октября 2010

По документам для разработчиков

возвращение true из этих прослушивателей событий остановит распространение события на другие прослушиватели событий, а также заблокирует обратный вызов к обработчику событий по умолчанию в View. Так что вы должны быть уверены, что хотите завершить событие, когда вы вернете true

Так что, возможно, возвращая false в ваших методах обработки событий, вы приблизитесь на шаг к тому, чего вы хотите достичь

2 голосов
/ 09 октября 2010

Я думаю, что у объекта может быть onClick или onTouch, и он будет использовать то, что определено последним.Я заметил это недавно и в некоторых своих приложениях.

1 голос
/ 17 сентября 2013

со мной все работает нормально после поиска, проб и ошибок, и надеюсь, что с вами удастся хорошо

1-добавить android:clickable="true" к ImageView в XML

2 - в вашей деятельности или просмотреи убедитесь, что return false ;

imageView.setOnTouchListener(new OnTouchListener() {
        @TargetApi(11)
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub          
                Log.v(TAG, "Touched Here");
                return false;
        }
    });

3-, затем и на последнем шаге убедитесь, что return true;

imageView.setOnLongClickListener(new OnLongClickListener() {

        public boolean onLongClick(View v) {
            // TODO Auto-generated method stub
            Log.v(TAG, "Long Pressed Here");
            return true;
            }        
        });

это будет хорошо работать при касании и длительном нажатии

1 голос
/ 01 марта 2011

Я попробовал «вернуть ложь». Это вызовет их обоих. Для следующего примера в заголовке будет показано другое сообщение.

public boolean onTouch(View v, MotionEvent event) {   
        // TODO Auto-generated method stub 
          int ea=event.getAction();                                    

          switch(ea){                                                       
          case MotionEvent.ACTION_MOVE:                                 
           int l=v.getLeft();                                       
           int b=v.getBottom();                                     
           int r=v.getRight();                                      
           int t=v.getTop();   
           String message = "l:"+l + "t:" + t+
             "r:"+r + "b:"+ b;
           this.setTitle(message);                                     
          }  
          return false;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
        this.setTitle("Click");
}

@Override
public boolean onLongClick(View arg0) {
    // TODO Auto-generated method stub
    this.setTitle("Long Click");
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...