有人可以幫我幾件關於mapview im試圖構建。 我有一個需要畫布並在其中繪製位圖的渲染器。 我創建了一個視圖,並在構造函數中我創建:ANDROID - MapView
bitmap = Bitmap.createBitmap(windowWidth, windowHeight, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
drawable = new BitmapDrawable(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
this.Render();
在的onDraw方法,我有這樣的:
super.onDraw(canvas);
canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor);
drawable.draw(canvas);
canvas.restore();
現在我想實現平移和縮放(不保存瓷磚目前進出口工作) 這是我的onTouch:
mScaleDetector.onTouchEvent(ev);
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
this.hasPanned = false;
final float x = ev.getX();
final float y = ev.getY();
mLastTouchX = x;
mLastTouchY = y;
mActivePointerId = ev.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE: {
final int pointerIndex = ev.findPointerIndex(mActivePointerId);
final float x = ev.getX(pointerIndex);
final float y = ev.getY(pointerIndex);
if (!mScaleDetector.isInProgress()) {
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
mPosX += dx;
mPosY += dy;
invalidate();
}
mLastTouchX = x;
mLastTouchY = y;
break;
}
case MotionEvent.ACTION_UP: {
mActivePointerId = INVALID_POINTER_ID;
if (this.mDownTouchX != this.mLastTouchX && this.mDownTouchY != mLastTouchY)
this.hasPanned = true;
break;
}
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = ev.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mLastTouchX = ev.getX(newPointerIndex);
mLastTouchY = ev.getY(newPointerIndex);
mActivePointerId = ev.getPointerId(newPointerIndex);
}
break;
}
}
return true;
這裏是我想和我的問題有:
- 當我搖我想計算以像素爲單位的距離,所以我可以告訴我的渲染器,當它再次呈現圖像。這是如何實現的?通過記住ACTION_DOWN上的座標並與ACTION_UP中的新座標進行比較?
- 當平移完成(並且圖像被重新渲染)時,我想將畫布(圖像)設置回其原始位置。目前它保持平鋪(因爲canvas.translate?)
- 我如何處理縮放手勢?有了這個代碼時,用我的手指縮小圖像是「拖」到左上角...
即時通訊新的android(和java),所以任何幫助preciated。
可以請一些人解釋一下,爲什麼當我捏縮放圖像粘在左上角? – no9
不太清楚這是如何涉及'MapView' ...你能詳細說明嗎? –