如何在onDraw中刷新背景颜色

时间:2012-01-09 02:56:12

标签: android android-widget

这是我观点的最简化版本。

public class MyView extends View {

    private int mBackgroundColor = android.R.color.white;

    @Override
    public void setBackgroundColor(int color) {
        super.setBackgroundColor(color);
        mBackgroundColor = color;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(mBackgroundColor);]
        //canvas.drawColor(mBackgroundColor, Mode.CLEAR);
        //canvas.drawBitmap(mBitmap, mRectSrc, mRectDst, mPaint);
    }

}

当从活动中调用setBackgroundColor时,问题是背景颜色不会改变。我想我没有看到明显的。

解决:

从nmJohn那里得到关于clipRect

的提示
//Clear the screen
canvas.clipRect(0, 0, viewWidth, viewHeight, Region.Op.REPLACE);            
mPaint.setColor(mBackgroundColor);
canvas.drawRect(0, 0, viewWidth, viewHeight, mPaint);

//Draw the image
canvas.clipRect(mRectDst.left, mRectDst.top, mRectDst.right, mRectDst.bottom, Region.Op.REPLACE);
canvas.drawBitmap(mBitmap, mRectSrc, mRectDst, mPaint);

为未来寻求者提供一个暗示

请确保提供 android.graphics.Color 即十六进制格式而不是android.R.color。[White / Black / ..]暂时不知道。

1 个答案:

答案 0 :(得分:0)

drawColor只设置当前剪辑的背景颜色。尝试将clipRect设置为画布区域。

另外,请确保您的视图实际上已失效,否则将无法调用onDraw。