Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnTap listener implementation

Tags:

android

tap

I have a doubt that is on tap listener implemented on a particular button, or image view or view? because the sites which I surfed only shows for the whole layout and I want my action to be performed on the tapping of a view. please help. Thank you.

like image 986
Riddhi Dudani Avatar asked Jul 16 '11 08:07

Riddhi Dudani


2 Answers

Any view can be setup with an onClickListener() which is part of the view class. The easiest way to do it is when you setup the references to your view in the onCreate() method. Here is an example for a image view:

ImageView iv = (ImageView) findViewByID(R.id.example);
iv.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // Do what you need to do on click
        ....
    }
});

UPDATE: DOUBLE TAP

Here is a sample activity which implements basic double tap detection on an image view:

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class DoubleTapActivity extends Activity {
    //Set the double tap delay in milliseconds
    protected static final long DOUBLE_CLICK_MAX_DELAY = 1000L;
    private ImageView iView;
    private long thisTime = 0;
    private long prevTime = 0;
    private boolean firstTap = true;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        iView = (ImageView)findViewById(R.id.iView);
        iView.setOnTouchListener( new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if(firstTap){
                    thisTime = SystemClock.uptimeMillis();
                    firstTap = false;
                }
                else
                {
                    prevTime = thisTime;
                    thisTime = SystemClock.uptimeMillis();

                    //Check that thisTime is greater than prevTime
                    //just incase system clock reset to zero
                    if(thisTime > prevTime){

                        //Check if times are within our max delay
                        if((thisTime - prevTime) <= DOUBLE_CLICK_MAX_DELAY){

                            //We have detected a double tap!
                            Toast.makeText(DoubleTapActivity.this, "DOUBLE TAP DETECTED!!!", Toast.LENGTH_LONG).show();
                            //PUT YOUR LOGIC HERE!!!!

                        }
                        else 
                        {
                            //Otherwise Reset firstTap
                            firstTap = true;
                        }
                    }
                    else 
                    {
                        firstTap = true;
                    }
                }
                return false;
            }
        });
    }
}
like image 122
Kenny Avatar answered Oct 30 '22 16:10

Kenny


Mostly to sense tap event you have to implement GestureDetector.OnGestureListener in your Activity. You can perform action by using onSingleTapUp(MotionEvent e) method of GestureDetector.OnGestureListener.

Generally for Button control, we use like

myButton.setOnClickListener(new OnClickListener() {});

or other clickListners and tap events are used for ImageView or any other customviews.

like image 2
Balaji Khadake Avatar answered Oct 30 '22 17:10

Balaji Khadake