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();
}
我正在编写一个简单的自定义 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();
}