package com.pinecone.technology.mcommerce.learning.android.chapter11.trackhistory; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.view.MotionEvent; import android.view.View; public class MultiTouchHistoricView extends View { private Paint paint = new Paint(); private boolean handleHistoricEvent = true; private Path path = new Path(); public MultiTouchHistoricView(Context context) { super(context); paint.setAntiAlias(true); paint.setStrokeWidth(6f); paint.setStyle(Paint.Style.STROKE); paint.setStrokeJoin(Paint.Join.ROUND); } @Override public void onDraw(Canvas canvas) { canvas.drawPath(path, paint); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); int action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_DOWN: path.moveTo(event.getX(), event.getY()); case MotionEvent.ACTION_MOVE: printSamples(event); break; case MotionEvent.ACTION_UP: break; } invalidate(); return true; } void printSamples(MotionEvent ev) { final int historySize = ev.getHistorySize(); final int pointerCount = ev.getPointerCount(); for (int h = 0; h < historySize; h++) { System.out.printf("At time %d:", ev.getHistoricalEventTime(h)); for (int p = 0; p < pointerCount; p++) { System.out.printf(" pointer %d: (%f,%f)", ev.getPointerId(p), ev.getHistoricalX(p, h), ev.getHistoricalY(p, h)); paint.setColor(Color.BLUE); path.lineTo(ev.getHistoricalX(p, h), ev.getHistoricalY(p, h)); } } System.out.printf("At time %d:", ev.getEventTime()); for (int p = 0; p < pointerCount; p++) { System.out.printf(" pointer %d: (%f,%f)", ev.getPointerId(p), ev.getX(p), ev.getY(p)); paint.setColor(Color.RED); path.lineTo(ev.getX(p), ev.getY(p)); } } }