Kanaiya Katarmal
Kanaiya Katarmal

Reputation: 6108

How to find touch event when finger is swiped over an ImageView

How to find touch event when finger is swiped over an Image.

Relative layout contains multiple image view. they are randomly placed. When I swipe my finger over screen I want to capture image view over which user has crossed his finger.

I am able to capture relative layout touch event Please suggest some way to capture image view touched in the swipe action in relative layout.

attached image layout for better understanding.

enter image description here

CODE:

public class MainActivity extends Activity {

    ImageView imageView;
    Rect imageViewArea;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView) findViewById(R.id.imageView);
        imageViewArea = new Rect();
        //imageView.getGlobalVisibleRect(imageViewArea);


        //not working
        imageView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                return false;
            }
        });
    }

    //working
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        switch(event.getActionMasked())
        {
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_MOVE:
            Log.i("log", "ACTION_MOVE");

            int x = (int) event.getX();
            int y = (int) event.getY();

            //not working 
            if(imageViewArea.contains(x, y)) {
                Toast.makeText(getApplicationContext(), "clicked", Toast.LENGTH_LONG).show();
            }

            break;
        case MotionEvent.ACTION_UP:
            break;
        default:
            break;
        }
        return super.onTouchEvent(event);
    }

Upvotes: 2

Views: 2273

Answers (2)

Gopal Gopi
Gopal Gopi

Reputation: 11131

this sample code may help you...

    final RelativeLayout layout  =(RelativeLayout) findViewById(R.id.detailsView);
    final ImageView imageView = (ImageView) findViewById(R.id.imageView);
    final Rect imageViewArea = new Rect();
    imageView.getGlobalVisibleRect(imageViewArea);
    layout.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int x = (int) event.getX();
            int y = (int) event.getY();
            if(imageViewArea.contains(x, y)) {
                // swipe is passing over ImageView....
            }
            return true;
        }
    });

EDIT:

private ImageView imageView;
private Rect imageRect;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView = (ImageView) findViewById(R.id.imageView1);
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    super.onTouchEvent(event);
    if (imageRect == null) {
        imageRect = new Rect();
        imageView.getGlobalVisibleRect(imageRect);
    }
    int x = (int) event.getX();
    int y = (int) event.getY();
    if (imageRect.contains(x, y)) {
        Log.i(TAG, "touch passing over imageView");
    }
    return true;
}

Upvotes: 3

Adam Radomski
Adam Radomski

Reputation: 2575

Set OnTouchListener to image or create own ImageView clas with overriden onTouch method

Upvotes: 0

Related Questions