Reputation: 6108
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.
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
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
Reputation: 2575
Set OnTouchListener to image or create own ImageView clas with overriden onTouch method
Upvotes: 0