在过去的几周里,我一直在为自定义视图上的缩放和滚动功能寻找合适的解决方案。在我的自定义视图中,我在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。