Android 自定义视图 canvas 清除失败

Android custom view canvas clear fails

我正在编写一个简单的自定义 View,它应该绘制一个 RSSI 信号形状(两个重叠的三角形,其中一个按比例填充信号电平)。除了清除 canvas.

之外,这些组件可以正常工作

我想我需要做这样的事情:

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

    final int mWidth = getMeasuredWidth();
    final int mHeight = getMeasuredHeight();
    final float _fillw = mWidth * (mLevel) / 100f;
    final float _fillh = mHeight * (100f - mLevel) / 100f;

    //canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
    canvas.drawColor(Color.BLACK);

    if (mLevel < mWarnLevel)
        mFillPaint.setColor(mWarnFillColor);
    else if ((mLevel >= mWarnLevel) && (mLevel < mSafeLevel))
        mFillPaint.setColor(mFillColor);
    else if (mLevel >= mSafeLevel)
        mFillPaint.setColor(mSafeFillColor);

    mFramePath.moveTo(0, mHeight);
    mFramePath.lineTo(mWidth, mHeight);
    mFramePath.lineTo(mWidth, 0);
    mFramePath.close();

    mFillPath.moveTo(0, mHeight);
    mFillPath.lineTo(_fillw, mHeight);
    mFillPath.lineTo(_fillw, _fillh);
    mFillPath.close();

    canvas.drawPath(mFramePath, mFramePaint);
    canvas.drawPath(mFillPath, mFillPaint);
}

public void setLevel(int level) {
    if (this.mLevel != level) {
        this.mLevel = level;
        invalidate();
    }
}

水平绘制正确,直到它变大,三角形面积也变大。当它开始减少时,该区域不再 更新 可能是因为背景未清除。 我也试过使用评论的 .drawColor() 行但没有运气。

P.S。我需要在此 View.

上设置透明背景

你只需要清理路径

public void clear()
{
 mFramePath.reset();
 mFillPath.reset();
 invalidate();
}