在Android中向画布添加图像

3

大家好

我希望您能帮助我理解在实现OnTouchEvent的View中如何将图像添加到画布的概念。到目前为止,这就是我想到的。
parent是Activity,在这个自定义视图被实例化并添加进去。

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

public void insertImage()
{
    if (parent.selected_icon.contentEquals("image1"))
    {
        image = getResources().getDrawable(R.drawable.image1);
    }
    else if (parent.selected_icon.contentEquals("image1"))
    {
        image = getResources().getDrawable(R.drawable.image2);
    }
    else if (parent.selected_icon.contentEquals("iamge3"))
    {
        image = getResources().getDrawable(R.drawable.image3);
    }

    Rect srcRect = new Rect(0, 0, image.getIntrinsicWidth(), 
            image.getIntrinsicHeight());
    Rect dstRect = new Rect(srcRect);

    Bitmap bitmap = Bitmap.createBitmap(image.getIntrinsicWidth(), 
            image.getIntrinsicHeight(), Bitmap.Config.ALPHA_8);

    Canvas canvas = new Canvas();
    canvas.drawBitmap(bitmap, srcRect, dstRect, null);
    invalidate();
}

这是你的第一个问题,格式很好。欢迎来到Stack Overflow! - Amplify91
第二个else if语句中写的是image1而不是image2。 - Anthony Graglia
1个回答

1

当您想要在视图上绘制时,必须在onDraw()中使用传递的Canvas进行操作。该Canvas已经绑定到实际绘制视图的Bitmap

我曾经做过类似的事情,我的方法如下:

  • 我将“要在视图上绘制的内容列表”作为类的成员。
  • 每当我向该列表添加内容时,我调用invalidate(),以便调用onDraw()
  • 我的onDraw()看起来像这样:

...

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas); // the default drawing

    for(ThingToBeDrawn thing : mListOfThingsToBeDrawn) {
         thing.drawThing(canvas); // draw each thing over the view
    }
}

Canvas只是用来绘制Bitmap的工具,它的工作方式与SurfaceView有很大不同。


我完全同意,在onDraw()方法中使用canvas.drawBitmap()。 - Amplify91
bigstones,请问您能告诉我方法invalidate()是什么样子的,以及在哪里调用它吗?先谢谢了。 - Yarik
我在MainActivity中有一个位图。我有一个自定义视图,它扩展了View,并且确实有一个onDraw()方法。但是我应该如何将MainActivity中的位图变量传递到自定义视图中呢? - Daniel Viglione
@Donato 就像你处理任何 Java 类一样:在活动中获取对自定义视图的引用,并使用类似 customView.setMyBitmap(myBitmap) 的 setter,或者如果你正在以编程方式添加视图,则在构造函数中传递它。为什么要点踩呢? - bigstones
@bigstones,你需要编辑你的回答,这样我才能取消踩。我只是有点沮丧,因为我看到了一些我也有的问题,但是得到的回答并没有回答我认为被问到的问题。 - Daniel Viglione

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接