5

I have to place an double click event on Image view..Whenever I double click on Image ,It sshould be Zoom.But I found that there is no such event like double click in Image Veiw. Can Anyone Tell me How To DO it?? Thanks in Advance..

Nirav Bhandari
  • 4,550
  • 6
  • 32
  • 59

5 Answers5

12

Try this approach:

  • add boolean doubleClick = false;
  • and Handler doubleHandler
  • in onClick check if doubleClick is true
  • if true, it is a double click
  • if not, set doubleClick to true and use the handlers postDelayed to set it back to false after i.e. 500ms
Arun
  • 1,391
  • 1
  • 10
  • 29
Maaalte
  • 6,011
  • 3
  • 29
  • 27
5

whenever the onClick() is called the new instance of Handler is created, if the Handler object is instantiated inside onClick(). So, instantiate handler outside onClick().

boolean isDoubleClicked=false;

Handler handler=new Handler();
Runnable r=new Runnable(){
  @Override
  public void run(){
    //Actions when Single Clicked
    isDoubleClicked=false;
  }
}

tv.setOnClickListener(new onClickListener){
  @Override
  public void onClick(View view){
    if(isDoubleClicked){
      //Actions when double Clicked
      isDoubleClicked=false;
      //remove callbacks for Handlers
      handler.removeCallbacks(r);
    }else{
      isDoubleClicked=true;
      handler.postDelayed(r,500);
    }
  }
}
Ashique Bava
  • 2,486
  • 2
  • 9
  • 21
4

The easiest way is to use long variable instead handler

private var doubleClickLastTime = 0L
view.setOnClickListener {
        if(System.currentTimeMillis() - doubleClickLastTime < 300){
            doubleClickLastTime = 0
            doAction()
        }else{
            doubleClickLastTime = System.currentTimeMillis()
        }
    }
Dmitriy Puchkov
  • 1,530
  • 17
  • 41
3

Maaalte's answer helped me to write this code.

declare doubleClick variable globally

   boolean  doubleClick = false;

Logic to handle double click

 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);
                }

            }


        });
Darshn
  • 1,512
  • 1
  • 23
  • 31
1

You may use onDoubleTapListener.

This link may hep you.

Anju
  • 9,379
  • 14
  • 55
  • 94