前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >View的位置参数及其Scroller类的理解

View的位置参数及其Scroller类的理解

作者头像
1025645
发布2018-08-23 11:30:12
5870
发布2018-08-23 11:30:12
举报
文章被收录于专栏:Android开发小工Android开发小工

Anroid 自定义View View的位置参数


1.位置参数
  • left = getLeft()
  • right = getRight()
  • top = getTop()
  • bottom = getBottom()

x和y是View左上角的坐标,translationX和translationY是View左上角相对于容器的偏移量。这几个参数都是相对于父容器的坐标。

  • x = left + translationX getX()
  • y = top + translationY getY()

getRawX()是相对于手机屏幕的x坐标,同样的,getRawY()是相对于手机屏幕的y坐标。

2.MotionEvent滑动参数
  • ACTION_DOWM:手指刚接触屏幕。
  • ACTION_MOVE:手指在屏幕上移动。
  • ACTION_UP:手指在屏幕上松开的一瞬间。

一个点击事件通常是:DOWN->UP 一个滑动事件通常是:DOWN->MOVE->MOVE->...->MOVE->UP

3.TouchSlop

TouchSlop是系统所能识别出的被认为是滑动的最小距离。 获取这个常量:ViewConfiguration.get(getContext()).getScaledTouchSlop();

4.Scroller的使用理解

我们先来看一段套路代码:

代码语言:javascript
复制
    Scroller scroller = new Scroller(getContext());
    //缓慢滚动到制定位置
    private void smoothScrollTo(int destX ,int destY){
        int scrollX = getScrollX();
        int scrollY = getScrollY();
        int deltaX = destX - scrollX;
        int deltaY = destY - scrollY;
        scroller.startScroll(scrollX,scrollX,deltaX,deltaY,1000);
        invalidate();
    }

    @Override
    public void computeScroll() {
        if (scroller.computeScrollOffset()){
            scrollTo(scroller.getCurrX(),scroller.getCurrY());
            postInvalidate();
        }
    }

Scroller类其实是一个在自身中存储各种运动参数的类,并没有关于真正滑动的功能,实现滑动的是scrollTo(x,y)可以理解是在他类的内部进行的滑动设想:你现在这个类中给他一个关于滑动的理想轨迹(从一个坐标,到另一个坐标和间隔时间),然后scroller根据这些进行规划(根据时间流逝的百分比算出应该滑动到的坐标),在重绘触发的回调函数computeScroll()中再滑动到置顶的位置scrollTo(scroller.getCurrX(),scroller.getCurrY())。 总结一下就是,Scroller并不能实现View的滑动,它需要配合View的computeScroll()方法才能实现弹性滑动的效果,它不断让View重绘,而每一次重绘都会导致View进行进行小幅度滑动,而多次小幅度滑动就组成了弹性滑动,这就是Scroller的原理。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.02.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.位置参数
  • 2.MotionEvent滑动参数
  • 3.TouchSlop
  • 4.Scroller的使用理解
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档