Android Scroll 学习笔记

本文是笔者学习《Android群英传》一书第五章的一些心得笔记。

滑动效果是如何产生的

View的滑动本质上就是View的移动,即改变View的位置。原理是不断改变View的坐标。为了实现这个效果,就必须不断监听用户的触摸事件,根据坐标动态地改变View的位置,从而实现滑动效果。那么首先就要了解一下Android中的坐标和触摸事件的相关知识。

Android中的坐标系

  • 绝对坐标系
    • 屏幕左上角的顶点为原点
    • getLocationOnScreen(int location[])
    • getRawX() getRawY()
  • 视图坐标系
    • 父视图左上角的顶点为原点
    • getX() getY()
  • 两种坐标系的共同点
    • 从顶点出发,向右为x轴正方向,向下为y轴正方向

触控事件MotionEvent

通常在onTouchEvent(MotionEvent event)方法中通过event.getAction()方法获取触控事件类型,然后根据不同的类型进行不同的操作。

获取坐标和距离的API

  • View提供的获取坐标方法(需要注意获取的都是相对于父布局的顶边和左边的距离)
    • getTop() 获取View自身顶边到父布局顶边的距离
    • getLeft() 获取View自身左边到父布局左边的距离
    • getBottom() 获取View自身底边到父布局顶边的距离
    • getRight() 获取View自身右边到父布局左边的距离
  • MotionEvent提供的方法
    • getX() 获取点击事件距离控件左边的距离,即视图坐标
    • getY() 获取点击事件距离控件顶边的距离,即视图坐标
    • getRawX() 获取点击事件距离屏幕左边的距离,即绝对坐标
    • getRawY() 获取点击事件距离屏幕顶边的距离,即绝对坐标

实现滑动的七种方法

  1. Layout方法
  2. offsetLeftAndRight() 和 offsetTopAndBottom()
  3. LayoutParams(书中的给出方法有BUG,因为自定义view不一定位于父布局的1号位,所以不能单纯通过调整view的margin来调整位置。必须在自定义view外单独套一层layout才能确保正确运行
  4. scrollTo 和scrollBy (注意此方法移动的是“画框”,所以“画布”的位移与偏移量相反。而且,如果view不是parent中唯一的view,其他view也会受到影响
  5. Scroller (此方法可以实现平滑移动而非瞬间移动。ViewDragHelper也是通过这种方法实现的)
  6. 属性动画
  7. ViewDragHelper
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值