如何在android中创建Scrollable和zoomable canvas?

时间:2014-06-16 13:10:20

标签: android canvas bitmap scroll zooming

在过去的几周里,我一直在为自定义视图上的缩放和滚动功能寻找合适的解决方案。在我的自定义视图中,我在onDraw()的画布上绘制位图,并在onSizeChanged()中创建新的位图和画布。 / p>

我的代码段在这里:

onDraw()方法。在这个方法中我调用了drawBitmap()这个方法从我自定义类的pagesProvider类中获取图像时间。

Bitmap backBitmap = pagesProvider.getPageBitmap(tile);
src = new Rect();
dst = new Rect(); 
@Override
public void onDraw(Canvas canvas) {

        drawBitmap(canvas, b, src, dst);
    }

这是drawBitmap()这个方法在canvas上基于Color模式的drawBitmap。这个颜色取自我的自定义选项类。再次,我在画布上使用mBitmap绘制位图,这个mBitmap是在onSizeChanged()和画布上的绘图路径上创建的。

private void drawBitmap(Canvas canvas, Bitmap backBitmap, Rect src, Rect dst) {

    if (colorMode != Options.COLOR_MODE_NORMAL) {

        paint.setColorFilter(new ColorMatrixColorFilter(new ColorMatrix(
                Options.getColorModeMatrix(this.colorMode))));
        canvas.drawBitmap(backBitmap, src, dst, paint);
    } else {
        canvas.drawBitmap(b, src, dst, null);
    }

    canvas.drawBitmap(mTopBitmap, 0, 0, mPaint); // mTopBitmap canvas is creating new bitmap on backBitmap bitmap canvas.
    canvas.drawPath(mPath, mPaint);

}

onSizeChanged():

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    this.width = w;
    this.height = h;

    mTopBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    mCanvas = new Canvas(mTopBitmap);

}

如果我删除canvas.drawPath(mPath,mPaint); drawBitmap()画布中的线条不是在mTopBitmap画布上绘制路径。如果我删除canvas.drawBitmap(mTopBitmap,0,0,mPaint);路径在backBitmap上绘制,但这些路径在修改时重置。

在onTouch UP中我调用mCanvas.drawPath(mPath,mPaint);用于在mTopBitmap上绘制新路径。

我的问题是我想在mCanvas上绘制mTopBitmap画布内容,并缩放mCanvas的mTopBitmap画布内容。

我写了缩放功能,我根据backBitmap大小添加了滚动条。它工作正常。但是我对mTopBitmap画布感到困惑,如何将滚动和缩放放入mTop Canvas。

0 个答案:

没有答案