当前位置: 首页 > 知识库问答 >
问题:

在具有彩色背景的画布上绘制位图(从可绘制对象)

甄德寿
2023-03-14

我正在做一个国际象棋应用程序,当我绘制棋盘的瓷砖时,它们在(透明)背景中不会变色。基本上,我想要的是,它类似于在ImageView中发生的事情,该图像视图显示具有彩色背景的图像(具有透明背景)。

这是代码

private final Paint squareColor;
private Rect tileRect;
private Drawable pieceDrawable;

public Tile(final int col, final int row) {
    this.col = col;
    this.row = row;

    this.squareColor = new Paint();
    squareColor.setColor(isDark() ? Color.RED : Color.WHITE);


}

public void draw(final Canvas canvas) {
    if(pieceDrawable != null) {

        Bitmap image = ((BitmapDrawable) pieceDrawable).getBitmap();
        ColorFilter filter = new LightingColorFilter(squareColor.getColor(), Color.TRANSPARENT);
        squareColor.setColorFilter(filter);
        canvas.drawBitmap(image, null, tileRect, squareColor);
    } else {
        canvas.drawRect(tileRect, squareColor);
    }
}

这就是棋盘的样子(左图)

如果我在绘制Bitmap call之前注释掉这2行,我就会得到正确的图像。

ColorFilter filter = new LightingColorFilter(squareColor.getColor(), Color.TRANSPARENT);
squareColor.setColorFilter(filter);

我的作品是带有透明背景的普通图像,作品没有画在正方形中。我怎么能有作品背后的红色呢?(就像带有背景色的相同图像的ImageView或彩色视图一样)

共有1个答案

仲孙磊
2023-03-14

只有当<code>pieceDrawable<code>为空时,才绘制背景。将代码更改为:

public void draw(final Canvas canvas) {
    canvas.drawRect(tileRect, squareColor); // Draws background no matter if place is empty.
    if(pieceDrawable != null) {
        Bitmap image = ((BitmapDrawable) pieceDrawable).getBitmap();
        ColorFilter filter = new LightingColorFilter(squareColor.getColor(), Color.TRANSPARENT);
        squareColor.setColorFilter(filter);
        canvas.drawBitmap(image, null, tileRect, squareColor);
    }
}
 类似资料:
  • 我试图通过扩展LineChart类并重写onDraw方法,在LineChart中绘制界限线之间的颜色。我在https://github.com/philjay/mpandroidchart/issues/485中这样做,其中彩色矩形简单地绘制在画布上: 使用上面的代码,我可以绘制彩色矩形作为折线图数据后面的背景,如下所示 然而,当我在y轴上滚动时,矩形将“溢出”到绘制x轴标签的区域,如图所示 我应

  • 我正在运行Ubuntu 16.04。在Android Studio上,当我试图在模拟器中运行我的应用程序时,我得到以下错误: 致命的例外:主要过程:项目名称在这里,PID: 2528java.lang.运行时间例外:画布:试图绘制太大(216090000bytes)位图。在android.view.DisplayListCanvas.throw如果不能绘制(DisplayListCanvas.ja

  • 问题内容: 我如何告诉paint方法仅在JPanel上而不是在整个JFrame上绘制背景。我的JFrame大小大于JPanel。当我尝试为JPanel绘制网格背景时,网格似乎遍及整个JFrame,而不仅仅是JPanel。 以下是部分代码: 问题答案: camickr是正确的。所以: 您需要严格将工程图与不同组件分开。Swing已经在管理子组件,因此绝对不需要在Panel的Frame中实现图形(调用

  • 我试图使用矩阵旋转位图。然后我试着把它画在画布上。但它就这么消失了! 下面是我的代码: } 我已经删除了缩放画布和事件监听器等的函数。使代码小而易读。 我周期性地调用setDirection方法,但是在它被调用之后,“userImage”drawable就消失了。有人能告诉我这里出了什么问题吗。。 谢谢

  • 我编写了这段代码,可以在JavaFX画布上绘制。它可以很好地工作,但我不知道如何重新绘制画布(比如在Swing中),以便在新画布上重新开始绘制。这是我的代码,非常感谢你的帮助!马里奥