【问题标题】:Android: change color of rectangle at runtimeAndroid:在运行时更改矩形的颜色
【发布时间】:2013-09-25 03:26:11
【问题描述】:

我有一个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();
    }
}

在 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();
        }  
});

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

【问题讨论】:

    标签: android colors runtime


    【解决方案1】:

    您调用了两次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();
        }
    }
    

    【讨论】:

    • 谢谢。如果我想最初创建多个形状然后通过单击更改它们的颜色,那么我应该什么时候第一次绘制它们?如果我将所有内容都放在 OnDraw 中,那么在每次无效时,所有这些都将再次绘制,而我可能需要更改一个颜色。
    • 嗯,实现这种情况取决于几个因素,但如果形状的数量不是太大,我想你应该可以使用一组颜色和矩形。您将从 0 迭代到 rects.length,并在每次迭代时调用 setColor 和 drawRect。
    • 但如果它很大,那就不是好方法。正确的?调用 canvas.drawRect(rects, paint); 怎么样?不调用无效?
    • 是的,但是你怎么知道选择哪个矩形会改变它的颜色?
    • 将它们全部保存在一个数组中。
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2012-11-15
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多