如何将位图设置为画布?

时间:2015-02-17 01:00:09

标签: android canvas android-canvas

我正在尝试使用Path,Path.quadTo和Canvas创建一个独特的形状,然后将位图传递给这个独特的形状。这个想法是方形位图将转换为画布的独特形状。我不确定这是否可行,但这是我想要完成的,这就是我如何解释将位图设置为画布的文档。我将位图设置为画布时收到错误“UnsupportedOperationException”。位图位于我的资源文件夹中。我错过了什么?

    @override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    // get bitmap
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.squareImage);

    // set up Paint attributes
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(5.of);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setAntiAlias(true);

    // set up path
    Path path = new Path();
    path.moveTo(x1, y1)

    // apply curve with quadTo function
    final float x2 = (x1 + x3)/2
    final float y2 = (y1 + y3)/2
    path.quadTo(x2, y2, x, y);

    // shape the canvas according to the path attributes
    canvas.drawPath(path, paint);

    }

    /* Note: at this point I have an unique shape. I now want to apply an image to this shape */

    // reference canvas passed into the onDraw() method and set to bitmap
    // canvas.setBitmap(mBitmap);

canvas.setBitmap(mBitmap)将导致错误

02-17 08:43:27.168: E/AndroidRuntime(3438): java.lang.UnsupportedOperationException
02-17 08:43:27.168: E/AndroidRuntime(3438):     at android.view.HardwareCanvas.setBitmap(HardwareCanvas.java:39)
02-17 08:43:27.168: E/AndroidRuntime(3438):     at com.example.puzzledemo.activity.PathExample$PathView.onDraw(PathExample.java:90)

要添加一些上下文,重点是创建具有独特形状的拼图。如果这对我的最终目标有帮助的话。提前谢谢!

2 个答案:

答案 0 :(得分:2)

我相信你正在寻找canvas.drawBitmap

答案 1 :(得分:0)

Portfoliobuilder,可用的颜色选择之一是透明的。也许如果您使用矩形位图来表示每个部分,但是在部分边框周围绘制透明,您可以获得不规则部分的外观,但仍然使用旨在用于矩形位图的android类?这可能会为您节省很多精力。你必须创建一个类来跟踪碎片的旋转方式,它们的距离以及哪一侧相匹配,但无论如何你都必须这样做。