Как разместить событие двойного щелчка на ImageView в Android
Я должен разместить событие двойного щелчка на изображении. Когда бы я ни щелкнул дважды на изображении, это должно быть Zoom. Но я обнаружил, что в Image Veiw нет такого события, как двойной щелчок. Может ли кто-нибудь сказать мне, как это сделать?? Заранее спасибо..
3 ответа
Попробуйте этот подход:
- добавлять
boolean doubleClick = false;
- а также
Handler doubleHandler
- в onClick проверьте, если
doubleClick is true
- если это правда, это двойной щелчок
- если нет, установите
doubleClick
чтобы правда и использовать обработчикиpostDelayed
чтобы установить его обратно в ложь через 500 мс
Всякий раз, когда вызывается onClick(), создается новый экземпляр Handler, если объект Handler установлен внутри onClick(). Итак, инсталлируйте обработчик вне onClick().
boolean isDoubleCliked=false;
Handler handler=new Handler();
Runnable r=new Runnable(){
@Override
public void run(){
//Actions when Single Clicked
isDoubleCliked=false;
}
}
tv.setOnClickListener(new onClickListener){
@Override
public void onClick(View view){
if(isDoubleClicked){
//Actions when double Clicked
isDoubleCliked=false;
//remove callbacks for Handlers
handler.removeCallbacks(r);
}else{
isDoubleCliked=true;
handler.postDelayed(r,500);
}
}
}
Самый простой способ - использовать длинную переменную вместо обработчика
private var doubleClickLastTime = 0L
view.setOnClickListener {
if(System.currentTimeMillis() - doubleClickLastTime < 300){
doubleClickLastTime = 0
doAction()
}else{
doubleClickLastTime = System.currentTimeMillis()
}
}
Ответ Маалте помог мне написать этот код.
объявить переменную doubleClick глобально
boolean doubleClick = false;
Логика для обработки двойного щелчка
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Runnable r = new Runnable() {
@Override
public void run() {
doubleClick = false;
}
};
if (doubleClick) {
//your logic for double click action
doubleClick = false;
}else {
doubleClick=true;
handler.postDelayed(r, 500);
}
}
});
Вы можете использовать onDoubleTapListener
,
Эта ссылка может помочь вам.