I have following situation:
I have a custom ListView with ImageView and TextView in a row. The ImageView has an onTouchListener, wchich invokes my onTouch method. Here are some lines from it:
if (event.getAction()==MotionEvent.ACTION_MOVE) {
layout.leftMargin = (int) event.getX() - dragIcon.getWidth()/2;
layout.topMargin = (int) event.getY() - dragIcon.getHeight()/2;
//Log.d("Tag", "Pozycja: " + event.getX() +", "+ event.getY());
}
dragIcon.setLayoutParams(layout);
When move is detected I'm showing up new image (not this in ListView) and I'm starting to move it according to x and y coordinates.
The problem is, that getX and getY return positions relative to ImageView in the list, not the whole ListView (I think so). So when I touch an item in the middle and swipe finger up, then getY returns negative values (above ImageView boundary).
Hope, I explained clearly..
Any ideas how to get this coordinates relative to the screen size? Thank you.
Try using getRawX()
and getRawY()
instead of getX()
and getY()
.
getX() and getY() returns the values respective to the views that it was called on. Hence Let's say,
ImageView imV = (ImageView)findViewById(R.id.image_view);
Then you can get x,y using
x = imV.getX() + event.getX();
y = imV.getY() + event.getY();
Here I assume you have set the onTouchListener on imV.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With