vga*_*nin 12 android android-custom-view android-graphics
在缩放GLES20RecordingCanvas上绘制的路径具有质量,就好像它在位图中未缩放,然后向上缩放.
相比之下,如果我Canvas使用支持位图创建,然后对Canvas对象应用相同的缩放转换,我会得到更优越的位图.
 这里使用
这里使用Path.addCircle和绘制两个圆圈Canvas.scale.使用缩放绘制上圆,使用后退位图GLES20RecordingCanvas使用缩放简单绘制下圆Canvas.
一些代码:
public class TestPathRenderer extends View {
    ...
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        int measuredWidth = getMeasuredWidth();
        int measuredHeight = getMeasuredHeight();
        float distortedWidth = getDistortedWidth();
        float distortedHeight = getDistortedHeight();
        path.reset();
        path.addCircle(distortedWidth/2f, distortedHeight/2f, Math.min(distortedWidth/2f, distortedHeight/2f), Path.Direction.CW);
        bitmap = assembleNewBitmap(measuredWidth, measuredHeight);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        switch (renderMode) {
            case RENDER_MODE_WO_BITMAP:
                drawOnCanvas(canvas);
                break;
            case RENDER_MODE_WITH_BITMAP:
                canvas.drawBitmap(bitmap, 0f, 0f, paint);
                break;
            default:
                throw new UnsupportedOperationException("Undefined render mode: " + renderMode);
        }
    }
    private Bitmap assembleNewBitmap(int w, int h) {
        Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawOnCanvas(canvas);
        return bitmap;
    }
    private void drawOnCanvas(@NonNull Canvas canvas) {
        canvas.save();
        canvas.scale(DISTORTION_FACTOR, DISTORTION_FACTOR);
        canvas.drawPath(path, paint);
        canvas.restore();
    }
}
我无法理解这两种情况的质量差异.对我来说,它们似乎必须是可以互换的.
| 归档时间: | 
 | 
| 查看次数: | 155 次 | 
| 最近记录: |