【问题标题】:Android: Canvas not scalingAndroid:画布不缩放
【发布时间】:2013-01-21 15:22:27
【问题描述】:

我有一个自定义视图,它在 onDraw() 的画布上绘制一些位图。绘图正在工作。看代码sn -p:

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    canvas.save();

    if(appInitialized) {

        hsSide.draw(canvas);
        scaleA.draw(canvas);
        scaleB.draw(canvas);

    }
    canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY);
    canvas.restore();
}

我已经实现了一个 ScaleGestureListener,它可以在屏幕上应用捏缩放时缩放画布。问题是画布没有缩放。如果我将canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY); 放在if(appInitialized) { 之前,它会缩放画布,但在它之后,绘图即hsSide.draw(canvas); 不会缩放。它按正常比例绘制。 以下是绘制方法:

hsDide.draw:

@Override
public void draw(Canvas canvas) {
    // TODO Auto-generated method stub
    canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, 0, null);
}

scaleA.draw:

@Override
public void draw(Canvas canvas) {
    // TODO Auto-generated method stub
    canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, canvas.getHeight()/2 - mBitmap.getHeight()/2, null);
}

scaleB.draw:

@Override
public void draw(Canvas canvas) {
    // TODO Auto-generated method stub

    canvas.save();
    mMatrix.setRotate(currentAngle, canvas.getWidth()/2, canvas.getHeight()/2);
    canvas.setMatrix(mMatrix);
    canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, canvas.getHeight()/2 - mBitmap.getHeight()/2, null);
    canvas.restore();
}

知道我哪里出错了...???

【问题讨论】:

    标签: android canvas bitmap scale android-custom-view


    【解决方案1】:

    实际上,查看您的代码,您应该在画布之前缩放画布,然后在绘制后恢复它。所以移动你的画布比例如下:

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        canvas.save();
    
       canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY); // MOVED HERE.
    
        if(appInitialized) {
    
            hsSide.draw(canvas);
            scaleA.draw(canvas);
            scaleB.draw(canvas);
    
        }
    
        canvas.restore();
    }
    

    然后,您将绘制大小基于画布大小。因此,当您缩放画布时,您仍在将其绘制到其整个大小,然后将其调整回正常大小。因此没有任何效果。

    您需要做的是在 BEFORE 缩放之前获取画布大小,然后也将其传递给您的 draw 方法。然后使用这些尺寸在画布上绘制。

    【讨论】:

      猜你喜欢
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2011-10-10
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多