android:tag="1" String sTag = v.getTag().toString();
int numPtrs = e.getPointerCount(); // 目前有多少點的觸控 for (int ptr = 0; ptr < numPtrs; ptr++) { int id = e.getPointerId(ptr); String msg = String.format(mFmt, e.getAction(), tag, e.getX(ptr), e.getY(ptr), e.getPressure(ptr)); // 另有時間的資訊,請參考 MotionEvent 連結的詳細說明 }
private final boolean DEBUG = true; if (DEBUG) Log.v(mLogTag, msg);
private int[] mColor = { Color.RED, Color.BLUE, Color.rgb(250, 20, 250), Color.rgb(20, 250, 250), Color.rgb(250, 250, 20) };
List<TPoint> mTpoints = new ArrayList<TPoint>();
protected void onDraw(Canvas canvas) { for (TPoint p : mTpoints) { paint.setColor(mColor[p.id]); canvas.drawCircle(p.x, p.y, 9, paint);
private String mFmt = "Action:%d %s, X=%.1f, Y=%.1f"; // Action編號, Action動作說明, Loc X, Y
http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html
// Let the ScaleGestureDetector inspect all events. mScaleDetector.onTouchEvent(ev); private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { mScaleFactor *= detector.getScaleFactor(); // Don't let the object get too small or too large. mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f)); invalidate(); return true; } }
final float x = ev.getX(); final float y = ev.getY(); mLastTouchX = x; mLastTouchY = y;
mLibrary = GestureLibraries.fromRawResource(this, R.raw.spells); public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { ArrayList<Prediction> predictions = mLibrary.recognize(gesture); // We want at least one prediction if (predictions.size() > 0) { Prediction prediction = predictions.get(0); // We want at least some confidence in the result if (prediction.score > 1.0) { // Show the spell Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show(); } } }