短视频app开发,界面滑动到底的几种实现方式
短视频app开发,界面滑动到底的几种实现方式
1.1 那么说明一下 getLegt(),getTop(),getBottom(),getRight();其实就是获取View自身到其父布局的距离。
如:getLegt() 就是获取自身左边到父布局左边的距离;
getTop() 就是获取自身上边到父布局上边的距离;
1.2 那么getX(),getY(),getRawX(),getRawY(); 是什么呢?
假设上图中View中的那个小圆点是我们点击触摸的位置,无论是ViewGroup还是View我们知道都是由onTouchEvent(MotionEvent event)处理,也就是说MotionEvent在与用户交互关系极大。
那么在MotionEvent中提供的获取焦点坐标的方法:
getX() 获取当前点击事件距离控件左边的位置。(视图坐标) (注意是控件左边的位置也就是自身View)
getY() 获取当前点击事件距离控件顶部位置。 (视图坐标) (注意是控件左边的位置也就是自身View)
getRawX() 获取点击事件距离屏幕左边的位置。(绝对坐标) (注意是当前屏幕也就是手机边缘)
getRawY()获取点击事件距离屏幕顶边的位置。 (绝对坐标) (注意是当前屏幕也就是手机边缘)
------------------------------------------要注意分清MotionEvent中的坐标系和1.1的坐标系--------------------------------------------
1.3 View的滑动实现View的滑动也就是学会自定义View的基础,在开发中我们难免会处理View的滑动,那么实现View滑动的细想大概都是一致的记录点击的触摸点手指移动记录后触摸的坐标计算偏移量,并通过偏移量更改View坐标实现View的滑动,这边只讲解layout(),offsetTopAndBottom()与offsetLeftAndRight(),LayputParams(), 这几种方法,对于动画实现滑动或者Scroller,ScrollTo(),ScrollBy()留到下个章节讲不然篇幅有点长。
1.3.1 layout()
View进行绘制的时候会调用onLayout()方法来设置View的显示位置,那么我们可以通过修改view的,left、top、right、bottom这4种属性来控制View的坐标,首先使用自定义View集成View 重写onTouchEvent 方法即可。
1 | @Override <br> public boolean onTouchEvent(MotionEvent event) {<br> //获取手指触摸屏幕的横坐标和纵坐标<br> int x = (int) event.getX();<br> int y = (int) event.getY();<br> switch (event.getAction()){<br> //手势点击<br> case MotionEvent.ACTION_DOWN:<br> mX=x;<br> mY=y;<br> break;<br> //手势滑动<br> case MotionEvent.ACTION_MOVE:<br> //计算移动的距离<br> int flx= x-mX;<br> int fly= y-mY;<br> //调用layout方法让View重新计算自己的位置<br> layout(getLeft()+flx,getTop()+fly,getRight()+flx,getBottom()+fly);<br> break;<br> //手势抬起<br> case MotionEvent.ACTION_UP:<br> break;<br> }<br> return true;<br> } |
接着在布局因为我们自定义的View就可以实现滑动
1 | <?xml version= "1.0" encoding= "utf-8" ?><br><LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" <br> xmlns:app= "http://schemas.android.com/apk/res-auto" <br> xmlns:tools= "http://schemas.android.com/tools" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" <br> android:orientation= "vertical" <br> tools:context= ".MainActivity" ><br> <com.example.myapplication.DemoView<br> android:layout_width= "80dp" <br> android:layout_height= "80dp" <br> android:id= "@+id/demoview" <br> android:background= "@color/colorPrimary" <br> android:layout_margin= "26dp" /><br></LinearLayout> |
如DemoView就是我实现的自定义View重写了onTouEvent;
1.3.2 offsetTopAndBottom()与offsetLeftAndRight()
1 | @Override <br> public boolean onTouchEvent(MotionEvent event) {<br> //获取手指触摸屏幕的横坐标和纵坐标<br> int x = (int) event.getX();<br> int y = (int) event.getY();<br> switch (event.getAction()){<br> //手势点击<br> case MotionEvent.ACTION_DOWN:<br> mX=x;<br> mY=y;<br> break;<br> //手势滑动<br> case MotionEvent.ACTION_MOVE:<br> //计算移动的距离<br> int flx= x-mX;<br> int fly= y-mY;<br> offsetTopAndBottom(fly);<br> offsetLeftAndRight(flx);<br> break;<br> //手势抬起<br> case MotionEvent.ACTION_UP:<br> break;<br> }<br> return true;<br> } |
offsetTopAndBottom()查看坐标图会发现Bottom的计算是通过纵轴去定义所以我们把Y轴的偏移量给到了offsetTopAndBottomoffsetLeftAndRight 是通过横轴去计算所以我们给到X 的偏移量给到offsetLeftAndRight
以上就是短视频app开发,界面滑动到底的几种实现方式, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现