java - Canvas.drawRect() 不绘制任何东西

标签 java android canvas android-canvas

我的 Canvas 类中的画家没有绘制矩形,尽管我将其配置为这样做。

我有一个简单的 Canvas 布局,并且设置了 6 个矩形画家,如果相应的 boolean 标志为 true,它们应该绘制一个灰色矩形。尽管如此,由于某种原因,即使给定的 boolean 值为 true,也不会绘制矩形。

如下面的屏幕截图所示(取自 onDraw 范围内),任何给定的矩形在运行时都有有效的坐标,因此它应该是可见的。在你问之前;是的,我已经验证了我的代码中的 canvas.drawRect() 调用已达到。他们根本不画任何东西。 enter image description here

我错过了什么?

下面是我的 Canvas 类。我是不是哪里搞砸了?

public class Canvas_StrumPad extends View {

private Paint eStringRectPainter, aStringRectPainter, dStringRectPainter, gStringRectPainter,
        bStringRectPainter, eeStringRectPainter;
private int viewWidth, viewHeight, stringRectWidth;
public int eRectBoundary, aRectBoundary, dRectBoundary, gRectBoundary, bRectBoundary, eeRectBoundary;

public boolean eStringTouched = true, aStringTouched, dStringTouched = true, gStringTouched, bStringTouched,
        eeStringTouched = true;

public Canvas_StrumPad(Context context) {
    super(context);
    initView();
}

public Canvas_StrumPad(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    initView();
}

public Canvas_StrumPad(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initView();
}

private void initView(){
    eStringRectPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
    eStringRectPainter.setColor(Color.BLACK);
    eStringRectPainter.setAlpha(128);

    aStringRectPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
    aStringRectPainter.setColor(Color.parseColor("#616161"));
    aStringRectPainter.setAlpha(128);

    dStringRectPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
    dStringRectPainter.setColor(Color.parseColor("#616161"));
    dStringRectPainter.setAlpha(128);

    gStringRectPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
    gStringRectPainter.setColor(Color.parseColor("#616161"));
    gStringRectPainter.setAlpha(128);

    bStringRectPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
    bStringRectPainter.setColor(Color.parseColor("#616161"));
    bStringRectPainter.setAlpha(128);

    eeStringRectPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
    eeStringRectPainter.setColor(Color.parseColor("#616161"));
    eeStringRectPainter.setAlpha(128);
}

public void setViewParams(int width, int height){
    viewWidth = width;
    viewHeight = height;

    stringRectWidth = viewWidth/6;

    eRectBoundary = stringRectWidth;
    aRectBoundary = stringRectWidth*2;
    dRectBoundary = stringRectWidth*3;
    gRectBoundary = stringRectWidth*4;
    bRectBoundary = stringRectWidth*5;
    eeRectBoundary = stringRectWidth*6;
}

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

    if (eStringTouched){
        canvas.drawRect(0,viewHeight,eRectBoundary,0,eStringRectPainter);
    }
    if (aStringTouched){
        canvas.drawRect(eRectBoundary,viewHeight,aRectBoundary,0,aStringRectPainter);
    }
    if (dStringTouched){
        canvas.drawRect(aRectBoundary,viewHeight,dRectBoundary,0,dStringRectPainter);
    }
    if (gStringTouched){
        canvas.drawRect(dRectBoundary,viewHeight,gRectBoundary,0,gStringRectPainter);
    }
    if (bStringTouched){
        canvas.drawRect(gRectBoundary,viewHeight,bRectBoundary,0,bStringRectPainter);
    }
    if (eeStringTouched){
        canvas.drawRect(bRectBoundary,viewHeight,viewWidth,0,eeStringRectPainter);
    }

    invalidate();
}

}

最佳答案

将底部设置为 0 应该是问题所在。我用以下矩形边尝试了您的代码及其工作原理:

if (eStringTouched) {
  canvas.drawRect(0, 0, 200, 200, eStringRectPainter);
}

为底部设置一个大于顶部的正值,为右侧设置一个大于左侧的正值。

关于java - Canvas.drawRect() 不绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107812/

相关文章:

javascript - 优先级-web-sdk : uploadImage

javascript - 我无法从 Canvas 获取 Base64 字符串

java - Google App Engine 部署错误 409

java - 将 Json 格式字符串与另一个字符串进行比较

java - 如何在JPA中有效地截断多对多表?

android - 前台服务被操作系统杀死

android - 如何使用 cordova 更改 versionCode?

android - 如何在android应用程序中为所有文本设置文本颜色?

java - 在JSP中关联两个ArrayList

javascript - 如何使用 JavaScript 修复 HTML Canvas 对象中扭曲/扭曲和剪切的图像?