2012-05-05 9 views
4

ドラッグアンドドロップ機能を実装し、Androidアプリケーションでビットマップを回転する方法を見つけようとしています。キャンバスに画像をドラッグして回転させたいと思っています。ここでは、私は私のキャンバスにビットマップを追加している方法です:x & yがあるAndroidのドラッグアンドドロップ/キャンバスでのビットマップの回転

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

event.getX();/event.getY();に等しいです。

どのように私はこれを達成することができますか?

ありがとうございます! :)

答えて

0

私の解決策ですが、多分それは非常にクールではないので、もし誰かが私とそれを共有して示唆している。

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コピー&ペーストコードではありません。実装を実装する必要があります。このような、そのコードを初期化することができるメインクラス(断片または活性)

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; 
     } 
    }); 

それが回転していない、唯一のドラッグ&ドロップの問題を解決します。しかし、主なアイデアはローテーションのためにも機能します。

関連する問題