Android:在运行时更改矩形的颜色

Sar*_*ara 1 android runtime colors

我有一个LinearLayout,我有一个自定义视图:

public class myView extends View  
{
    Rect rects = new Rect(30,30,80,80); 
    Canvas myCanvas;
    @Override
    public void onDraw(Canvas canvas)     
    {
         myCanvas = canvas;
         paint.setColor(Color.RED);
         canvas.drawRect(rects, paint);

    }
    void changeColor()
    {
        paint.setColor(Color.BLUE);
        myCanvas.drawRect(rects, paint);
        myCanvas.invalidate();
    }
}
Run Code Online (Sandbox Code Playgroud)

在MainActiviy我有:

LinearLayout lv = (LinearLayout) View.inflate(this, R.layout.activity_main, null);
drawView = new myView(this);
lv.addView(drawView); 
setContentView(lv);
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener()
{
        @Override
        public void onClick(View v) {
            drawView.changeColor();
        }  
});
Run Code Online (Sandbox Code Playgroud)

单击按钮后,我想通过调用changeColor来更改矩形的颜色.但是在其他地方创建了新的矩形!你能帮我么?

ssa*_*tos 6

您正在呼叫drawRect两次(在使视图无效之前,然后再打开onDraw).此外,没有必要存储引用Canvas.


在变量中保留所需的颜色,更改它并使视图无效.-

public class myView extends View {

    private Color color = Color.RED;

    Rect rects = new Rect(30,30,80,80); 

    @Override
    public void onDraw(Canvas canvas) {
         paint.setColor(color);
         canvas.drawRect(rects, paint);
    }

    void changeColor() {
        color = Color.BLUE
        invalidate();
    }
}
Run Code Online (Sandbox Code Playgroud)