0

matrix を使用して Bitmap を回転させようとしています。次に、 Canvas に描画しようとしています。しかし、それは消えるだけです!

以下は私のコードです:

    public class MultitouchView extends View {

private static final int INVALID_POINTER_ID = -1;
private static final String TAG = "MultitouchView";
private Drawable image;
private Drawable userImage;

Bitmap userOriginal;
Bitmap userResult;

private float scaleFactor = 1.0f;
private ScaleGestureDetector scaleGestureDetector;

private float mPosX;
private float mPosY;

private float mLastTouchX;
private float mLastTouchY;
private int mActivePointerId = INVALID_POINTER_ID;

private int direction = 0;

Context context;

public MultitouchView(Context context) {
    super(context);
    image = context.getResources().getDrawable(
            R.drawable.plain_black_wallpaper);
    image.setBounds(0, 0, image.getIntrinsicWidth(),
            image.getIntrinsicHeight());

    userOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.navigation);

    userImage = context.getResources().getDrawable(R.drawable.navigation);
    userImage.setBounds(500, 500, 550, 550);

    setFocusable(true);

    scaleGestureDetector = new ScaleGestureDetector(context,
            new ScaleListener());
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    // Set the image bounderies
    canvas.save();
    //scale canvas
    canvas.scale(scaleFactor, scaleFactor);
    image.draw(canvas);
    canvas.translate(mPosX, mPosY);

    //rotate user drawable

    userImage.draw(canvas);

    canvas.restore();
}

 public void setDirection(int direction) {
        this.direction = direction;
        rotateBitmap();
        invalidate();
      }

private void rotateBitmap() {
    Matrix matrix = new Matrix();
    matrix.postRotate(this.direction);
    userResult = Bitmap.createBitmap(userOriginal,0,0, userOriginal.getWidth(), userOriginal.getHeight(), matrix,true);
    userImage=new BitmapDrawable(this.getResources(),userResult);

}

}

スケール キャンバスやイベント リスナーなどの機能を削除しました。ここでコードを小さくして読みやすくします。

私は setDirection メソッドを定期的に呼び出しますが、それが呼び出された後、「userImage」ドローアブルが消えます。ここで何がうまくいかないのか、誰でも提案できますか..

ありがとう

4

1 に答える 1

0

だから私は何が間違っていたのかを見つけました..回転ビットマップは正常に機能していましたが、ドローアブルに境界を設定していないため、「userImage」ドローアブルが位置0,0で高さと幅0,0で描画されていたため、消える。以下に示すように、回転ビットマップ関数を変更して修正しました。

private void rotateBitmap() {
    Matrix matrix = new Matrix();
    matrix.postRotate(this.direction);
    userResult = Bitmap.createBitmap(userOriginal,0,0, userOriginal.getWidth(), userOriginal.getHeight(), matrix,true);
    userImage=new BitmapDrawable(this.getResources(),userResult);
    userImage.setBounds(500, 500, 550, 550);

}

userImage.Setbounds を実装する必要がありました...

于 2013-11-04T17:04:20.020 に答える