android的滑动控制


     我们在开发中经常遇到滑动到下一页的情况可是哪一种情况是能滑动到下一页、或者说是留在原来页面呢。

滑动页面首先我们想到的就是viewpager这个简单好用的滑动页面控制可是很少有人知道里面到底是控制如何实现滑动的。

     那就让我们来讲讲VelocityTracker这个获取滑动速度的对象。首先一般是得到最小滑动距离或者自己写一个距离来控制

mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();这就是得到的最小滑动距离,其次当然是通过我们这个速度来判断是否到下一个页面,一般这个速度自己根据情况定义比如: private static final int SNAP_VELOCITY = 600;当达到这个速度后就滑动到下一个界面,反之则留在原页面。

    然后我们从代码中来讲:重写ontouchevent,

     @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        if (mVelocityTracker == null) {
            mVelocityTracker = VelocityTracker.obtain();//获取到VelocityTracker对象
        }
        mVelocityTracker.addMovement(event);//将你的滑动动作添加到该对象中。

         case MotionEvent.ACTION_UP:  //在手指抬起的时候
                // Log.e(TAG, "event : up");

                    final VelocityTracker velocityTracker = mVelocityTracker;

                    velocityTracker.computeCurrentVelocity(1000);//意思为一秒时间内运动了多少个像素

                    int velocityX = (int) velocityTracker.getXVelocity();//得到你在x方向上运动的距离

                    // Log.e(TAG, "velocityX:"+velocityX);

                    if (velocityX > SNAP_VELOCITY && mCurScreen > 0) {
                        // Log.e(TAG, "snap left");
                        scrollToScreen(mCurScreen - 1);//返回到上一页

                    } else if (velocityX < -SNAP_VELOCITY && mCurScreen < getChildCount() - 1) {
                        // Log.e(TAG, "snap right");
                        scrollToScreen(mCurScreen + 1);//滑动到下一页

                    } else {
                        scrollToDestination();//留在原来的页面
                    }
                    if (mVelocityTracker != null) {
                        mVelocityTracker.recycle();//回收这个对象
                        mVelocityTracker = null;
                    }
                }

   这是我们自己通过velocityTracker这个对象对其进行操作,还有一个onGesturelistener这个手势监听的,里面有个

onfling方法里面就有对velocityTracker封装,我们来看下下面一个例子

private int verticalMinDistance = 20;  //最小滑动距离
private int minVelocity         = 600;  //最小滑动速度
    
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    
     if (e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) { 
    
         // 切换Activity 
         // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class); 
         // startActivity(intent); 
         Toast.makeText( this , "向左手势" , Toast.LENGTH_SHORT).show(); 
     } else if (e2.getX() - e1.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) { 
    
         // 切换Activity 
         // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class); 
         // startActivity(intent); 
         Toast.makeText( this , "向右手势" , Toast.LENGTH_SHORT).show(); 
    
    
     return false
}
   总结:滑动换页首先距离上要达到,然后滑动速度达到才能到另一个页面。有问题欢迎大家讨论交流。。

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水的川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值