手指劃動切換Activity

openkk 12年前發布 | 4K 次閱讀 Mob

 以下代碼用于Activity之間的劃動切換,大概實現原理就是判斷手指的劃動速度和劃動方向以確定向哪個Activity跳轉,switchTo***Activity()為Activity的跳轉方法

private VelocityTracker velocityTracker;//用于得到手勢在屏幕上的滑動速度
private static final int VELOCITY = 600;
@Override public boolean onTouchEvent(MotionEvent event) { String localClassName = getLocalClassName();//當前所在類名 LogUtil.log(TAG, "class Name:"+localClassName); int action = event.getAction(); //float x = event.getX(); //float y = event.getY();

switch (action) {
case MotionEvent.ACTION_DOWN:
    if(velocityTracker == null){
        velocityTracker = VelocityTracker.obtain();//取得手勢在屏幕上的滑動速度
        velocityTracker.addMovement(event);
    }           
    //lastMotionX = x;

    break;

case MotionEvent.ACTION_MOVE:
    //int deltaX = (int) (lastMotionX - x);
    if(velocityTracker != null){
        velocityTracker.addMovement(event);
    }
    //lastMotionX = x;
    break;

case MotionEvent.ACTION_UP:

    int velocityX = 0;
    if(velocityTracker != null){
        velocityTracker.addMovement(event);
        velocityTracker.computeCurrentVelocity(1000);//計算每秒滑動多少個像素
        velocityX = (int) velocityTracker.getXVelocity();//最后計算檢索X速度
    }

    if(velocityX > VELOCITY ){
        if("ui.MainActivity".equals(localClassName)){
            switchToTvLiveActivity();
        }else if("ui.LocalMediaActivity".equals(localClassName)){
            switchToMainActivity();
        }else if("ui.NetMediaActivity".equals(localClassName)){
            switchToLocalMediaActivity();
        }else if("ui.TvLiveActivity".equals(localClassName)){
            switchToNetMediaActivity();
        }
    } else if(velocityX < -VELOCITY ){
        if("ui.MainActivity".equals(localClassName)){
            switchToLocalMediaActivity();
        }else if("ui.LocalMediaActivity".equals(localClassName)){
            switchToNetMediaActivity();
        }else if("ui.NetMediaActivity".equals(localClassName)){
            switchToTvLiveActivity();
        }else if("ui.TvLiveActivity".equals(localClassName)){
            switchToMainActivity();
        }
    }

    if(velocityTracker != null){
        velocityTracker.recycle();//回收
        velocityTracker = null;
    }

    break;
}

return true;

}</pre>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!