首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android - drawRectangle颜色

android - drawRectangle颜色
EN

Stack Overflow用户
提问于 2016-11-24 23:54:32
回答 2查看 74关注 0票数 0

在我的代码中有三个形状,每次都用相同的颜色填充。现在我想让它们随机交换颜色。从这里怎么走?现在它将所有形状设置为相同的颜色,但我希望它们使用所有颜色并更改矩形的颜色

我在usedColors.add(Color.paint);上的代码中遇到错误,它说“类型列表中的方法add(int,Color)不适用于参数(Int)”。

paint.setColor(usedColors.get(x));中,它给出了“类型setColor(int)中的方法不适用于参数(字符串)”。

代码语言:javascript
运行
复制
    public class MainActivity extends Activity {

            private Paint paint = new Paint();

            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);  
                Canvas canvas = new Canvas();       
                paint.setAntiAlias(true);                                                   
                List<Color> usedColors = new ArrayList<>();
                Random rand = new Random();

        int colorsFound = 0;

        while(colorsFound < 3) {
            int rando = rand.nextInt(3) + 1;
            switch (rando) {
                case 1:
                    if (!usedColors.contains("yellow")) {
                        colorsFound++;
                        usedColors.add(Color.YELLOW);
                    } else {
                        continue;
                    }
                    break;
                case 2:
                    if (!usedColors.contains("green")) {
                        colorsFound++;
                        usedColors.add(Color.GREEN);
                    } else {
                        continue;
                    }
                    break;
                case 3:
                    if (!usedColors.contains("red")) {
                        colorsFound++;
                        usedColors.add(Color.RED);
                    } else {
                        continue;
                    }
                    break;
            }
        }

        Paint paint = new Paint();

        paint.setColor(usedColors.get(0));
        canvas.drawRect((float) ((float) canvas.getWidth()/50), (float) (canvas.getHeight()/1.32), canvas.getWidth()/15, (float) (canvas.getHeight()/2.8), paint);

        paint.setColor(usedColors.get(1));
        canvas.drawRect((float) (canvas.getWidth()/1.067), (float) (canvas.getHeight()/1.32), (float) (canvas.getWidth()/1.02), (float) (canvas.getHeight()/2.8), paint);

        paint.setColor(usedColors.get(2));
canvas.drawRect((float) (canvas.getWidth()/10), (float) (canvas.getHeight()/3), (float) (canvas.getWidth()/1.1), (float)  (canvas.getHeight()/3.35), green);
EN

回答 2

Stack Overflow用户

发布于 2016-11-25 00:24:55

更新

你已经声明了

代码语言:javascript
运行
复制
ArrayList<String> usedColors ...

此列表只能包含String引用。因为Color.YELLOW不是String,所以当您尝试添加它时,编译器会报错。

最好的解决方法是将Color存储在列表中:

代码语言:javascript
运行
复制
List<Color> usedColors = new ArrayList<>();

现在,您必须进行适当的更改,以确保始终在列表中使用Color对象。

原始答案

现在,您正在onCreate()中绘制矩形,它只在创建Activity时调用一次。为了更改矩形的颜色,您需要响应一些触发更改发生的事件。例如,您可以创建一个按钮,用户可以单击该按钮来更改颜色,或者您可以创建一个计时器,用于在一段时间后更改颜色。我建议你在Android中做一些事件处理的研究,以了解更多关于如何做到这一点。

您还可以考虑创建自定义组件。这将允许您将绘图功能封装到单个类中,该类可以多次重用。然后,您可以比使用当前设计更容易地添加更多矩形。

票数 0
EN

Stack Overflow用户

发布于 2016-11-25 00:43:39

您具有相同的颜色,因为您不会在实际调用canvas.drawRect()之间更改绘制颜色。

您可以在onCreate()方法后面添加简单的方法:

代码语言:javascript
运行
复制
   private Paint getRandomColorPaint() {
        Paint paint = new Paint();
        paint.setAntiAlias(true);   
        Random random = new Random();
        int[] colors = {Color.YELLOW, Color.BLUE, Color.GREEN, Color.RED };
        int randomNumber = random.nextInt(colors.length);
        paint.setColor(colors[randomNumber]);
        return paint;
    }

然后打电话给:

代码语言:javascript
运行
复制
canvas.drawRect( ..same here.., getRandomColorPaint(paint));

在这种情况下,所有三个形状都将具有随机颜色(但它们可以以一定的概率相同)。在你的资源文件中创建颜色数组会更好,但这里我只是提供了一个例子。

如果要动态更改颜色,可以添加一个按钮并添加onClickListener()并更新其中的所有形状。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40790523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档