从 onDraw() 绘制到创建的位图

发布于 2024-11-26 05:19:50 字数 524 浏览 7 评论 0原文

我正在尝试绘制位图,以便可以将自定义视图放入 imageView 中。onDraw 方法中的代码是:

    public void onDraw(Canvas canvas) {     

    Bitmap drawGraph = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.ARGB_8888);       
    canvas.setBitmap(drawGraph);    
    canvas.drawBitmap(drawGraph, 0, 0, bgPaint);

我的问题是,如果我尝试以这种方式使用位图,我只会得到黑屏。我知道如果我不尝试绘制位图,我的其余代码将按照显示的方式工作。

如果我注释掉该行

canvas.setBitmap(drawGraph);

那么一切都会正常工作,所以这就是问题所在,但我不知道为什么。

我哪里出错了?

I'm trying to draw to a Bitmap so I can put my custom view inside an imageView.The code within the onDraw method is:

    public void onDraw(Canvas canvas) {     

    Bitmap drawGraph = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.ARGB_8888);       
    canvas.setBitmap(drawGraph);    
    canvas.drawBitmap(drawGraph, 0, 0, bgPaint);

My problem is that if I try to use a Bitmap in this way, I just get a black screen. I know that the rest of my code works as it displays if I don't try to draw to a bitmap.

If I comment out the line

canvas.setBitmap(drawGraph);

Then everything works perfectly, so this is the problem but I dont know why.

where am I going wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮生面具三千个 2024-12-03 05:19:50

事实证明我确实必须创建第二个画布。我的工作代码如下,供可能需要它的人使用:

    public void onDraw(Canvas canvas) {

    Canvas singleUseCanvas = new Canvas();      

    drawGraph = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.ARGB_8888);      
    singleUseCanvas.setBitmap(drawGraph);   

    canvas.drawBitmap(drawGraph, 100, 100, bgPaint);

Turns out I did have to create a second canvas. My working code is below just for anyone who might need it:

    public void onDraw(Canvas canvas) {

    Canvas singleUseCanvas = new Canvas();      

    drawGraph = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.ARGB_8888);      
    singleUseCanvas.setBitmap(drawGraph);   

    canvas.drawBitmap(drawGraph, 100, 100, bgPaint);
娇俏 2024-12-03 05:19:50

我认为是 canvascanvas2 二分法。尝试只使用canvas2(参数)来绘制。

I think is the canvas and canvas2 dichotomy. Try to use only canvas2 (the parameter) to draw.

凉城凉梦凉人心 2024-12-03 05:19:50

AFAIK 最有效的方法是覆盖可绘制设置器。

@Override
public void setImageBitmap(Bitmap bm) {
    bmp = bm;
}

@Override
public void setImageDrawable(Drawable drawable) {
    try {
        bmp = ((BitmapDrawable) drawable).getBitmap();
    } catch (Exception e){
        log(e.toString());
    }
}

AFAIK The most efficient way is to override drawable setters.

@Override
public void setImageBitmap(Bitmap bm) {
    bmp = bm;
}

@Override
public void setImageDrawable(Drawable drawable) {
    try {
        bmp = ((BitmapDrawable) drawable).getBitmap();
    } catch (Exception e){
        log(e.toString());
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文