我現(xiàn)在非常恨自己手賤選了安卓這門課,作業(yè)多的令人發(fā)指。不過自己選的課,哭著也要上完。本文主要講解如何實現(xiàn) 滑動屏幕時切換Activity 更多見:iii.run
VelocityTracker簡介
android.view.VelocityTracker主要用跟蹤觸摸屏事件(flinging事件和其他gestures手勢事件)的速率何鸡。
用addMovement(MotionEvent)函數(shù)將Motion event加入到VelocityTracker類實例中。
使用getXVelocity() 或getXVelocity()獲得橫向和豎向的速率到速率時牛欢,但是使用它們之前請先調(diào)用computeCurrentVelocity(int)來初始化速率的單位 骡男。
-
使用recycleVelocityTracker()釋放空間,循環(huán)使用氢惋。
當你需要跟蹤觸摸屏事件的速度的時候
使用obtain() 方法來獲得 VelocityTracker 類的一個實例對象在onTouchEvent回調(diào)函數(shù)中洞翩,使用addMovement(MotionEvent)函數(shù)將當前的移動事件傳遞給VelocityTracker對象使用computeCurrentVelocity (int units)函數(shù)來計算當前的速度,使用 getXVelocity ()焰望、 getYVelocity ()函數(shù)來獲得當前的速度骚亿。
使用VelocityTracker
private void initView(){
entryLayout = (RelativeLayout)super.findViewById(R.id.entry);
entryLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
createVelocityTracker(event); //獲取實例對象
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: //
xDown=event.getX();
break;
case MotionEvent.ACTION_MOVE:
int xSpeed = getScrollVelocity();
xMove = event.getRawX();
int distanceX1 = (int) (xMove - xDown);
int distanceX2 = (int) (xDown-xMove);
if ((distanceX1 > XDISTANCE_MIN||distanceX2>XDISTANCE_MIN )&&(xSpeed>XSPEED_MIN)) {
openNew();
}
break;
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
}
return true;
}
});
}
對于 MotionEvent
ACTION_DOWN: 表示用戶開始觸摸.
ACTION_MOVE: 表示用戶在移動(手指或者其他)
ACTION_UP:表示用戶抬起了手指
ACTION_CANCEL:表示手勢被取消了
ACTION_OUTSIDE: 表示用戶觸碰超出了正常的UI邊界.
ACTION_POINTER_DOWN:有一個非主要的手指按下了.
ACTION_POINTER_UP:一個非主要的手指抬起來了
其余部分代碼
private int getScrollVelocity() {//計算移動距離
mVelocityTracker.computeCurrentVelocity(1000);
int velocity = (int) mVelocityTracker.getXVelocity();
return Math.abs(velocity);
}
private void createVelocityTracker(MotionEvent event){
if(mVelocityTracker == null){
mVelocityTracker = VelocityTracker.obtain(); //獲得VelocityTracker類實例
}
mVelocityTracker.addMovement(event);//將事件加入到VelocityTracker類實例中
}
private void recycleVelocityTracker(){
mVelocityTracker.recycle();
mVelocityTracker = null;
}
private void openNew(){
Intent intent = new Intent(SCOSEntry.this,MainScreen.class);
Bundle bundle = new Bundle();
bundle.putString("message","FromEntry");
intent.putExtras(bundle);
startActivity(intent);
}