ビルドしようとしているマップビューについていくつかお役立てください。 レンダラにキャンバスをとり、そこにビットマップを描画します。 私はビューを作成し、コンストラクタで、私が作成します。アンドロイド - MapView
onDrawメソッドで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();
私はこの持っている:
super.onDraw(canvas);
canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor);
drawable.draw(canvas);
canvas.restore();
今私は、パンとズームを実現したいと思いますが(現在保存されているタイルなく動作IM) ここに私の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の新しい座標と比較することで?
- パンが完了したら(イメージが再レンダリングされる)キャンバス(イメージ)を元の位置に戻したいと思います。現在のところ(キャンバストランスレートのためパンニングされたままです)
- ズームジェスチャーはどのように処理しますか?このコードでは、指でズームアウトするときに、画像が左上隅にドラッグされます。
Imはどのようなヘルプもpreciateされています。
ちょっと説明してください。ピンチズームを行うと、画像が左上隅に貼り付けられますか? – no9
これが 'MapView'とどう関係しているのかは分かりません...あなたはそれについて詳述できますか? –