Android arrastrar y soltar / rotar mapa de bits en lienzo

Estoy tratando de encontrar una forma de implementar la función de arrastrar y soltar y girar un mapa de bits en mi aplicación de Android. Quiero poder arrastrar una imagen sobre lienzo y rotarla. Aquí es cómo estoy añadiendo bitmap a mi lienzo:

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.dog); mCanvas.drawBitmap(bm,x-100,y-100 , mPaint); 

donde x & y son iguales a event.getX(); / event.getY(); event.getX(); / event.getY(); .

¿Alguna idea de cómo puedo lograr esto?

¡Gracias por adelantado! 🙂

Aquí está mi solución, tal vez no es muy genial, así que si alguien ha sugerido compartirlo conmigo.

 public class BitmapDragAndDrop { BitmapDragAndDropListener listener; public BitmapDragAndDrop(BitmapDragAndDropListener listener) { this.listener = listener; } public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: listener.onDragStart(motionEvent.getX(), motionEvent.getY()); view.invalidate(); return true; case MotionEvent.ACTION_MOVE: listener.onDragging(motionEvent.getX(), motionEvent.getY()); view.invalidate(); return true; case MotionEvent.ACTION_UP: listener.onDragEnd(listener.onDrop(motionEvent.getX(), motionEvent.getY())); view.invalidate(); return true; } return false; } public interface BitmapDragAndDropListener { void onDragStart(float x, float y); void onDragging(float x, float y); boolean onDrop(float x, float y); void onDragEnd(boolean isEntered); } } public class YourDrawer implements BitmapDragAndDrop.BitmapDragAndDropListener { Bitmap originalImage; //for restore initial state Bitmap drawingImage; //bitmap for drawing states. Canvas imageCanvas; Bitmap objectBitmap; public YourDrawer(Bitmap imageBmp, Bitmap objectBmp) { this.originalImage = imageBmp.copy(Bitmap.Config.RGB_565, true); this.drawingImage = imageBmp.copy(Bitmap.Config.ARGB_8888, true); this.imageCanvas = new Canvas(drawingImage); this.objectBitmap = objectBmp; //Draw your object at standard place where you need drawObject(); } private void restoreImageToOriginal() { imageCanvas.drawBitmap(originalImage, 0, 0, null); } @Override public void onDragStart(float x, float y) { //do whatever you want } @Override public void onDragging(float x, float y) { restoreImageToOriginal(); //Draw bitmap object at new coordinates drawMyObject(x, y); } } @Override public boolean onDrop(float x, float y) { if (isRightPlace(x, y)) { return true; } else { return false; } } @Override public void onDragEnd(boolean isEntered) { restoreImageToOriginal(); if (isEntered) { drawMyObjectAtLastCoordinates(); } } public Bitmap getDrawingBitmap() { return drawingImage; } } 

Ofc no es copiar y pegar código. Usted necesita agregar algo de su implementación a él.

En la clase principal (fragmento o actividad) puedes init ese código como este:

 YourDrawer yourDrawer = new YourDrawer(originalImage, objectBitmap); onTouchListener = new BitmapDragAndDrop(yourDrawer); imageView.setImageBitmap(yourDrawer.getDrawingBitmap())); imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (onTouchListener != null) onTouchListener.onTouch(view, motionEvent); return false; } }); 

Resuelve sólo el problema de arrastrar y soltar, no gira. Pero la idea principal funcionaría incluso para la rotación.

  • La sombra CardView no se procesa cuando se convierte en mapa de bits
  • Tratando de dibujar en un mapa de bits cargado por el usuario
  • ¿Por qué estoy recibiendo java.io.IOException: Mark ha sido invalidado?
  • La compresión de mapa de bits de Android no es buena
  • Imagen de Facebook como icono grande La notificación aparece en blanco en diferentes teléfonos?
  • Cómo convertir un dibujable a un mapa de bits?
  • Cómo corregir "lienzo: intentando utilizar un error de mapa de bits reciclado"?
  • Lista de contactos con contacto La foto crea problemas de rendimiento
  • Cómo convertir el formato de imagen NV21 en mapa de bits?
  • Convertir la textura procesada de OpenGL ES 2.0 en mapa de bits y volver
  • Obtener información de mapa de bits de mapa de bits almacenado en carpeta dibujable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.