Android 滑动

来源:互联网 发布:汕头有淘宝代运营 编辑:程序博客网 时间:2024/06/10 00:03

在Android  开发中 由于手机大小的限制,必定很多时候都会遇到需要自定义 滑动来展示所有内容, 如使用自带控件 ListView  scrollview  属性动画等


     首先 简单的介绍下 正常情况下在Android 中 实现滑动的几种方法 

    

1.layout            LayoutParams  

     上面这两种方法使用比较类似     都是在在onTouchEvent 中 获取 手指的偏移量  (假定为moveX   moveY)  重新设置view的坐标来实现的

layout 方法    :  

layout(getLeft()+moveX     ,           getTop()+moveY     ,           getRight()+moveX   ,           getBottom+moveY)
layoutParams 方法

ViewGroup.MarginLayoutParams layoutParas =(ViewGroup.MarginLayoutParams)getLayoutParams();layoutParams.leftMargin=getLeft()+moveX;layoutParams.topMargin=getTop()+moveY;setLayoutParams(layoutParams);


2.offsetLeftAndRight()  和  offsetTopAndBottom() 

 这种方法使用非常简单,就像方法名字一样 直接设置偏移量即可   

示例:

offsetLeftAndRight(moveX)  offsetTopAndBottom(moveY) 


3.scrollTo    ScrollBy 

scroll'to 和scrollBy 在实际使用中是存在一定的区别的 


scrollTo 是移动到具体的坐标   他的移动和 layout    LayoutParams   是类似的

scrollBy 是增量移动   他的使用与 offsetLeftAndRight()  和  offsetTopAndBottom()  是类似的


同时scrollTo 和scrollBy使用的时候与上述 2种方法存在着差异

在View中: 

上面两种方案 移动的是view 本身(画布固定不动)   而scrollTo 和scrollBy 移动的是view的内容

在ViewGroup 中:

上面两种方案 移动的是viewGroup 整体(画布固定不动)   而scrollTo 和scrollBy 移动的是子view


因此 想要正常使用scrollTo  和 scrollBy需要在父控件中使用   


同时scrollTo和scrollBy的参数都是偏移量  举个简单的例子 现在坐标点是(0,0) 我想要把view移动到(100,100)   需要执行代码 scrollTo(-100,-100);  

由于scrollTo和scrollBy 所选取的坐标原点不同,在实际使用的时候也存在着差异 scrollTo是使用的 绝对坐标    即手机屏幕左上角为(0,0)原点  而scrollBy采用的相对坐标  即父控件左上角为(0,0)原点



4.Scroller 类 

Scroller 类的实现原理和scrollTo scrollBy 类似 他是把scrollTo 的一下子移动到目的坐标 改为一步步移动过去给人以一种平滑的感觉(帧动画)

Scroller 类的使用  :

----1.初始化  

Scroller scroller = new Scroller(context);
Scroller在初始化的时候需要传入一个Context ,便于获屏幕的属性

----2.模拟滑动

模拟滑动 需要重写该类的computeScroll()方法     在该方法中书写滑动逻辑 

例子:

 @Override public void computeScroll() {    super.computeScroll();    if(scroller.computeScrollOffset()){        scrollTo(0,scroller.getCurrY());        postInvalidate();   }}
需要注意的是  上述代码是在一个自定义viewGroup 中复制过来的 如果在view中 应该是父控件调用scrollTo方法   。

computeScrollOffset  是判断 是否滑动完成       
postInvalidate  重绘view    在重绘的时候会再次调用该方法 实现循环

----3.开始模拟

使用Scroller 类的startScroll方法即可    该方法有一个重载方法  它们一个规定了时间 一个没有


5.ViewDragHelper 类

其实google 为我们提供的DeawerLayout 和SildingPaneLayout两个布局中就是使用了ViewDragHelper 。ViewDragHelper虽然功能最为强大 但是他的使用比较复杂。

----1.初始化

----2.拦截事件

----3.处理computeScroll

----4.处理回调 

 


以上便是Android 中实现滑动的几种方案(ViewDragHelper 在其他篇章中详细介绍)




0 0
原创粉丝点击