当前位置: 首页 > 知识库问答 >
问题:

Android旋转位图并绘制画布

谯灿
2023-03-14

我试图使用矩阵旋转位图。然后我试着把它画在画布上。但它就这么消失了!

下面是我的代码

    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”drawable就消失了。有人能告诉我这里出了什么问题吗。。

谢谢

共有1个答案

籍辰沛
2023-03-14

所以我发现了问题所在。。旋转位图功能正常,但由于我没有设置可绘制的“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);

}

用户图像。需要实现设置界限...

 类似资料:
  • 我的任务是在画布上绘制许多矩形,但所有矩形都有一个旋转角度,它们必须在画布上旋转。我在寻找这个问题的解决方案时遇到的许多建议都指出了绘制一个矩形并旋转画布的方法(canvas.rotate(angle)),但它会旋转所有画布,并且只能使用一个矩形。在画布上绘制许多旋转矩形的最佳方法是什么?我想画矩形(单色,带颜料),但不是位图,因为时间效率和内存。 目前我主要的方法是创建一堆画布,在每个画布上绘制

  • 我正在运行Ubuntu 16.04。在Android Studio上,当我试图在模拟器中运行我的应用程序时,我得到以下错误: 致命的例外:主要过程:项目名称在这里,PID: 2528java.lang.运行时间例外:画布:试图绘制太大(216090000bytes)位图。在android.view.DisplayListCanvas.throw如果不能绘制(DisplayListCanvas.ja

  • 我可以绘制图像,但我如何旋转该图像例如45度并绘制它,然后绘制另一个图像与-50度旋转在同一画布? 不适用于我,因为它会旋转所有画布内容。

  • 问题内容: 我有一个齿轮图像,我想绕固定点连续旋转。 之前,我是通过将图像作为ImageView包含在我的Android类中并对其应用RotateAnimation来实现的。 RotateAnimation ra07 = new RotateAnimation(0, 359, 129, 186); ra07.setDuration(10000); ra07.setRepeatCount(Rotat

  • 问题内容: 我目前有一个迷宫游戏,它绘制一个5 x 5的正方形(占用屏幕的宽度并将其均匀分割)。然后,对于每个使用x和y坐标的框,我使用drawRect绘制彩色背景。 我遇到的问题是我现在需要在同一位置绘制图像,因此需要替换当前的纯背景色填充。 这是我当前用于drawRect的代码(一些示例): 然后,我还需要为画布中的所有其他正方形实现背景图像。该背景将在其顶部绘制简单的1px黑色线条,当前代码

  • 我正在创建一个视图,允许我绘制给定的位图。 当我创建画布时,我将位图作为它的基础。它在模拟器上工作得很好,但是当我试图在手机上使用它时,它表现得很奇怪,并将位图旋转了90度。 以下是我创建画布的方式。我从以前的活动中获得正确的。 这里是截图 谢谢你的帮助,我不习惯于画布,所以我有点迷路了:/