安卓自定义View之滑动

Scroller的基础知识

Scroller类其实并不负责“滚动”这个动作,“滚动”的动作[1]是由基类View的scrollTo(x,y)scrollBy(dx,dy)的这两个方法完成的,Scroller类只是根据要滚动的起始位置和结束位置生成中间的过渡位置,从而形成一个滚动的动画。

一个View在容器(比如ViewGroup)中的滚动不是自身发起的动作,而是由父容器驱动容器内的子控件来完成,换句话说就是发生滚动效果的是组件的内容。例如在ViewGroup中使用Scroller,移动的是所有子View。但如果在TextView中使用,那么移动的将是TextView中的文本。

scrollTo(x,y)和scrollBy(dx,dy)

scrollTo,滚动到指定的位置
scrollBy,在原来的基础上,在滚动(dx,dy)的距离,内部的实现其实是调用了scrollTo

public void scrollBy(int x, int y) {
  scrollTo(mScrollX + x, mScrollY + y);
}

此处的x,y是相对于当前View左上角
当x为负数时,表示内容向右滚动
当y为负数时,表示内容向下滚动

getX,getTranslationX和getScrollX的区别

  • getX()与getY()方法获取的是View左上角相对于父容器的坐标
    当View没有发生平移操作时,getX()==getLeft()、getY==getTop()。

  • getTranslationX与getTranslationY是View左上角相对于父容器的偏移量:translationX = getX() - getLeft(),当View未发生平移操作时,translationX 与translationY都为0。

  • getScrollX与getScrollY得到的是View调用scrollTo或者scrollBy方法得到的值,无论这个值怎么改变,都不会影响View相对于父View的坐标,因为它滚动的是View中的内容,而不是View本身

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一滑动效果的产生 滑动一个View,本质区别就是移动一个View。改变当前View所在的坐标,原理和动画相似不断改...
    猿万阅读 9,974评论 0 14
  • 内容是博主照着书敲出来的,博主码字挺辛苦的,转载请注明出处,后序内容陆续会码出。 当了解了Android坐标系和触...
    Blankj阅读 6,677评论 3 61
  • 前言 自定义View作为Android进阶的基础,是我们开发者不得不学习的知识,而酷炫的自定义View效果,都离不...
    maoqitian阅读 1,609评论 0 6
  • 日子一天天的过着 生活也就是那样 每天规律的干着自己的事 默默地默默地 每一朵花儿都有他盛开的时候 不要急该来的总...
    不文艺疯青年阅读 189评论 0 1
  • 《边城》新书一到手,就迫不及待的开封翻阅,哈哈哈,好尴尬!第一篇《渔》的第一段话,就把我难住了。“罾罶”两个陌生的...
    方娥阅读 1,353评论 0 0