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! 🙂

One Solution collect form web for “Android arrastrar y soltar / rotar mapa de bits en lienzo”

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.

  • ImageView: recicla automáticamente el mapa de bits si ImageView no está visible (dentro de ScrollView)
  • Android Editar canales de mapa de bits
  • Configuración de varios elementos personalizados en MultiAutoCompleteTextView: Android
  • BitmapFactory no puede decodificar un mapa de bits de Uri después de las fotos tomadas en Android Nougat
  • Cómo convertir bitmap a PNG y luego a base64 en Android?
  • Bordes dentados en imágenes presentadas en Android
  • Imágenes de escala baja en Android: ¿se puede hacer?
  • Convertir un mapa de bits en GrayScale en Android
  • android convertir mapa de bits a bufferedinputstream
  • Java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset ()
  • Android, Guardar y cargar un mapa de bits en caché de diferentes actividades
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.