程式碼
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();
}
}
}