Android - MapView
-
12-11-2019 - |
Domanda
Qualcuno può aiutarmi alcune cose riguardanti mapview che sto cercando di costruire. Ho un rendering che prende la tela e ci attira una bitmap. Ho creato una vista e nel costruttore che creo:
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();
Nel metodo Ondraw ho questo:
super.onDraw(canvas);
canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor);
drawable.draw(canvas);
canvas.restore();
Ora vorrei implementare Pan and Zoom (attualmente sto lavorando senza piastrelle salvate) Ecco il mio 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;
Ecco cosa vorrei e problemi che ho:
- Quando vado, vorrei calcolare la distanza in pixel in modo da poter dire al mio rendering quando rende di nuovo l'immagine. Come si ottiene questo? Ricordando le coordinate su Action_Down e confrontando nuove coordinate in Action_up?
- Quando Pan è completo (e l'immagine viene resorizzata) vorrei riportare la tela (immagine) nella sua posizione originale. Attualmente rimane panoramico (a causa di Canvas.Translate?)
- Come gestisco i gesti zoom? Con questo codice quando si fa uno zoom con le dita, l'immagine viene "trascinata" verso l'angolo in alto a sinistra ...
Sono nuovo in Android (e Java), quindi qualsiasi aiuto è precoce.
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow