MotionEvent getX() 区别 getRawX()

getRawX()和getRawY()获得的是相对屏幕的位置,getX()和getY()获得的永远是view的触摸位置坐标
(这两个值不会超过view的长度和宽度)。

如果重写Activity的

onTouchEvent(MotionEvent event)  

,这个时候获得的是屏幕点击位置的坐标。event.getX() 与 event.getRawX()获取的值是一样的并且event.getY() 与 event.getRawY()获取的值是一样,还能获取触摸标题栏时的坐标位置,但是触摸状态栏时的坐标位置不能获得。

在 Android 中,实现拖动效果通常可以使用以下两种方式: 1. 使用触摸事件实现拖动 在触摸事件中,可以通过 MotionEvent 的 getX() 和 getY() 方法获取当前手指的位置,并通过设置 View 的坐标来实现拖动效果。具体实现可以参考以下代码: ``` public class YourView extends View { private int lastX; private int lastY; public YourView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int left = getLeft() + dx; int top = getTop() + dy; int right = getRight() + dx; int bottom = getBottom() + dy; layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; } return true; } } ``` 2. 使用 GestureDetector 实现拖动 GestureDetector 是 Android 提供的手势检测类,可以用于检测手势事件,包括拖动事件。在 GestureDetector.OnGestureListener 接口中,提供了 onScroll() 方法用于处理拖动事件。具体实现可以参考以下代码: ``` public class YourView extends View implements GestureDetector.OnGestureListener { private GestureDetector mGestureDetector; public YourView(Context context) { super(context); mGestureDetector = new GestureDetector(context, this); } @Override public boolean onTouchEvent(MotionEvent event) { return mGestureDetector.onTouchEvent(event); } @Override public boolean onDown(MotionEvent event) { return true; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { int dx = (int) distanceX; int dy = (int) distanceY; int left = getLeft() + dx; int top = getTop() + dy; int right = getRight() + dx; int bottom = getBottom() + dy; layout(left, top, right, bottom); return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } @Override public void onLongPress(MotionEvent event) { } @Override public void onShowPress(MotionEvent event) { } @Override public boolean onSingleTapUp(MotionEvent event) { return false; } } ``` 以上两种方式都可以实现拖动效果,具体使用哪种方式取决于实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值