如何在View中追蹤手指的滑動(dòng)速度呢?
關(guān)鍵類(lèi):VelocityTracker
思路:在VIew的onTouchEvent()中,當(dāng)MotionEvent.ACTION_DOWN時(shí)初始化VelocityTracker, 在MotionEvent.ACTION_MOVE進(jìn)行追蹤,當(dāng)滑動(dòng)停止之后(MotionEvent.ACTION_UP or MotionEvent.ACTION_CANCEL)不要忘記調(diào)用clear()來(lái)回收內(nèi)存.
寫(xiě)了一個(gè)代碼關(guān)于追蹤手指滑動(dòng)的速度。
用了兩種方式來(lái)顯示獲取的值:一種是直接將追蹤到的數(shù)值畫(huà)在了view上;一種是寫(xiě)了一個(gè)回調(diào)的接口。
/**
* Created by Administrator on 2016/11/16 0016.
*/
public class TestVelocityView extends View {
//用于回調(diào)的接口
GetVelocityListener listener;
//追蹤速度關(guān)鍵的類(lèi)。沒(méi)有這個(gè)這篇文章將毫無(wú)意義
VelocityTracker velocityTracker;
//要畫(huà)文字或者任何東西都需要的paint
Paint paint = new Paint();
public GetVelocityListener getListener() {
return listener;
}
public void setListener(GetVelocityListener listener) {
this.listener = listener;
}
public TestVelocityView(Context context) {
this(context,null);
}
public TestVelocityView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public TestVelocityView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint.setTextSize(50);
}
@Override
protected void onDraw(Canvas canvas) {
//畫(huà)文字的代碼。
canvas.save();
paint.setColor(Color.BLACK);
canvas.drawText("x = "+xVelocity+"y ="+yVelocity,getLeft(),getTop(),paint);
//畫(huà)完之后回收一下
canvas.restore();
}
int xVelocity = 0;
int yVelocity = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//初始化
velocityTracker = VelocityTracker.obtain();
break;
case MotionEvent.ACTION_MOVE:
//追蹤
velocityTracker.addMovement(event);
velocityTracker.computeCurrentVelocity(1000);
xVelocity = (int) velocityTracker.getXVelocity();
yVelocity = (int) velocityTracker.getYVelocity();
if (listener != null) {
listener.get(xVelocity, yVelocity);
//強(qiáng)制刷新一下view,否則不會(huì)一直掉onDraw。
invalidate();
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
//回收
velocityTracker.clear();
velocityTracker.recycle();
break;
}
return true;
}
public interface GetVelocityListener {
public void get(int x, int y);
}
}