getX()和getRawX()的区别

首先看看View里面的几个方法:
视图左侧位置:View.getLeft()
视图右侧位置:View.getRight()
视图顶部位置:View.getTop()
视图底部位置:View.getBottom()
视图宽度:View.getWidth()
视图高度:View.getHeight()
也不分析研究了,网上有很多人总结了的,直接上最终图片理解:
这里写图片描述
其实这些方法的值就是本身相对于父控件的距离,和屏幕没有关系。
然后看下MotionEvent中getX()和getRawX()的含义:
直接看最终图片理解:

对于view的ontouchEvent(MotionEvent event){}来说,
这里先理解一下,触摸的时候肯定是一个点的(不管手指粗细),这个点必定有个坐标。然后由图可知:
getRawX():表示触摸点相对于屏幕的坐标
getX():表示触摸点相对于本身控件最左边和最上边的距离
getLeft()和getTop()上面说了,就是当前控件相对于父控件的左边和上边距离(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕),
getY(),getRawY()一样的道理

如果你的某个Activity中实现OnTouchListener接口,需要重写onTouch(View view,MotionEvent event)
这个方法,getRawX()和getRawY()获得的是相对屏幕的位置,getX()和getY()获得的永远是view的触摸位置坐标
(这两个值不会超过view的长度和宽度)。

如果重写Activity的onTouchEvent(MotionEvent event)

,这个时候获得的是屏幕点击位置的坐标。event.getX() 与 event.getRawX()获取的值是一样的,event.getY() 与 event.getRawY()获取的值是一样,还能获取触摸标题栏时的坐标位置,但是触摸状态栏时的坐标位置不能获得。
(注:Activity上有两段宽度:一个是状态栏,一个是标题栏,每一个宽度都占了25像素)

在Android开发中,ExoPlayer是Google官方推荐的视频播放库,它支持广泛的视频格式和功能,包括视频的缩放和移动。如果您需要在一个`Box`容器内实现视频的缩放和移动,您可能需要使用`SimpleExoPlayerView`,`TextureView`或者`SurfaceView`等组件来显示视频。以下是一些实现视频缩放和移动的基本步骤: 1. 使用`SimpleExoPlayerView`:您可以在布局文件中使用`SimpleExoPlayerView`来嵌入视频。这个View内部使用的是`TextureView`,它支持视频的缩放和移动。 2. 布局调整:为了使`SimpleExoPlayerView`能够缩放和移动,您需要确保它的父布局允许子视图的移动和缩放。例如,使用`RelativeLayout`或`ConstraintLayout`作为父布局,并设置`SimpleExoPlayerView`的属性,如`layout_alignParentTop`、`layout_alignParentStart`等,来指定视频视图的位置。 3. 控制缩放和移动:您可以在您的Activity或Fragment中,通过编程的方式来控制`SimpleExoPlayerView`的移动和缩放。例如,您可以监听触摸事件来改变`SimpleExoPlayerView`的`translationX`和`translationY`属性来移动视频,以及修改其`scaleX`和`scaleY`属性来实现缩放效果。 4. 动画效果:为了实现更平滑的用户体验,可以使用Android的动画API来创建移动和缩放的动画效果。 5. 保持视频内容在屏幕内:确保在缩放和移动视频时,视频内容始终可见,没有被裁剪掉,特别是在屏幕边缘。 示例代码片段(实现简单的触摸事件监听来移动视图): ```java SimpleExoPlayerView playerView = findViewById(R.id.exo_player_view); playerView.setOnTouchListener(new View.OnTouchListener() { private float initialX; private float initialY; private float initialTouchX; private float initialTouchY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: initialX = v.getX(); initialY = v.getY(); initialTouchX = event.getRawX(); initialTouchY = event.getRawY(); return true; case MotionEvent.ACTION_MOVE: v.setX(initialX + (event.getRawX() - initialTouchX)); v.setY(initialY + (event.getRawY() - initialTouchY)); return true; } return false; } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值