5

Я добавляю изображения в родительский макет динамически. И я выполняю операции увеличения/уменьшения масштаба при добавлении изображения. Я хочу удалить добавленный вид onLongPress.onTouch, onLongClick вместе в android

img.setOnLongClickListener(longClickAction); 
img.setOnTouchListener(touchAction); 

onLongPress:

OnLongClickListener longClickAction = new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 

     parentLayout.removeView((ImageView)v); 
     return false; 
    } 
}; 

onTouch:

OnTouchListener touchAction = new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     ImageView i = (ImageView)v; 

     //perfrom zoom operation on touch of imageview 
     zoom(i, event); 
     return true; 

    } 
}; 

Только Прикоснитесь события работают. Зачем? Как у меня есть оба? Где я ошибаюсь? Что мне делать, чтобы удалить добавленный вид? Пожалуйста, помогите мне. Заранее спасибо.

+0

вы ее решили? – Siddhesh

+0

@ Сидшеш следуйте моим [ниже ответа] (http://stackoverflow.com/a/41952363/4629101), проблема будет решена. –

ответ

13

onTouch всегда вызывается для вашей точки зрения, так как это начальное состояние диспетчеризации событий в представлении. Когда вы долго нажимаете свое мнение, это по-прежнему вызывает, и с тех пор, как вы вернетесь true в onTouch (это означает, что вы воспользовались этим событием, и его больше не нужно отправлять), вы не получите onLongPress. Что будет делать трюк возвращается false в onTouch

+4

Но тогда вызовы 'onTouch' и' onLongPress' будут вызваны. Что, если 'onLongPress' означает не называть' onTouch'? –

+0

@ LuisA.Florit: вы нашли решение для этого? одна и та же проблема со мной, как onTouch, так и onLongPress вызывают одновременно. – Tejas

+0

пункт будет отмечен @luis A. Florit –

-2

Попробуйте это, он отлично работает для меня.

boolean isMoving= false; 

yourView.setOnTouchListener(new View.OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      isMoving = true; 
      Log.i("isMoving:", "true"); 
     } 
     if(event.getAction()==MotionEvent.ACTION_UP){ 
      isMoving=false; 
      Log.i("isMoving:","false"); 
     } 
     return false; 
    } 
}); 
yourView.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     if(!isMoving){ 
      //do onlongclick event here 
     } 
     return true; 
    } 
});; 
1

Как обсуждалось @asenovmonTouch() всегда вызывается как это начальное состояние диспетчеризации событий в представлении, но если мы возвращаем значение ложь в onTouch() Тогда оба будет работать как шарм, и проблема будет решена.

Edit: Мое предложение для пользователей является то, что вместо реализации OnLongClickListener() и OnTouch() вместе, попробуйте использовать функцию OnLongClickListener() в Двойной щелчок события.

Вы можете реализовать двойной щелчок в следующих способах:

int i = 0; 
btn.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    i++; 
    Handler handler = new Handler(); 
    Runnable r = new Runnable() { 

     @Override 
     public void run() { 
      i = 0; 
     } 
    }; 

    if (i == 1) { 
     //Single click 
     handler.postDelayed(r, 250); 
    } else if (i == 2) { 
     //Double click 
     i = 0; 
     ShowDailog(); 
    } 


    } 
}); 
Смежные вопросы