Android 滑动

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值