[android]Java。如何做添加更多的颜色,到 paint ?

标签: Java Android
发布时间: 2017/3/19 15:55:56
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想创建一个绘图应用程序,到目前为止我能从选择两种颜色 (绿色和黑色) 和两个形状 (圆形和正方形)。我想要添加更多的颜色,到 paint 与但我想不出如何添加超过 2 种颜色。

这些是我正在使用的类。

public class DrawLinesActivity extends AppCompatActivity
 {
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawshapes);
        DrawLines d = new DrawLines(this);
        setContentView (d);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        super.onCreateOptionsMenu(menu);
        MenuItem menu1 = menu.add(0, 0, Menu.NONE, "Green");
        MenuItem menu2 = menu.add(0, 1, Menu.NONE, "Black");
        MenuItem menu3 = menu.add(0,2, Menu.NONE, "Pixel Brush");
        MenuItem menu4 = menu.add(0,3, Menu.NONE, "Smooth Brush");

        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch(item.getItemId())
        {
            case 0:
                colours.fill = 0;
                return true;
            case 1:
                colours.fill = 1;
                return true;
            case 2:
                colours.shape = 0;
                return true;
            case 3:
                colours.shape = 1;
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }

    }
}

...

public class DrawLines extends View
{
    Canvas c;
    Paint paint;
    Bitmap bmp;
    Random g;
    float X, Y;

    public DrawLines(Context context)
    {
        super(context);
        g=new Random();

        Bitmap.Config conf = Bitmap.Config.ARGB_8888;
        bmp= Bitmap.createBitmap(1050,1650,conf);

        paint = new Paint();
        paint.setStyle (Paint.Style.STROKE);
        paint.setColor (Color.WHITE);

        this.setOnTouchListener(new OnTouchListener()
        {
            public boolean onTouch(View v, MotionEvent event)
            {

                float x, y;

                c = new Canvas (bmp);
                x = event.getX ();
                y = event.getY ();
                System.out.printf ("%f %f\n", X, Y);

                paint.setAntiAlias (true);

                if (colours.fill == 0)
                {
                    paint.setStyle (Paint.Style.FILL);
                    paint.setColor (Color.GREEN);

                    if (colours.shape == 0)
                        c.drawRect (x, y, x + 50, y + 50, paint);
                    else
                        c.drawOval(new RectF (x, y, x + 50, y + 50), paint);
                }
                else
                {
                    paint.setStyle (Paint.Style.FILL);
                    paint.setColor (Color.BLACK);

                    if (colours.shape == 0)
                        c.drawRect (x, y, x + 50, y + 50, paint);
                    else
                        c.drawOval(new RectF (x, y, x + 50, y + 50), paint);
                }

                paint.setColor (Color.WHITE);

                invalidate ();

                return true;
            }
        });
    }

    @Override
    protected void onDraw (Canvas c)
    {
        super.onDraw (c);

        c.drawBitmap (bmp, 0, 0, paint);
    }
}

...

public class colours
{
    static public int shape = 0;
    static public int fill = 0;

}

解决方法 1:

首先,请确保用户可以访问其他的颜色。让我们尝试添加红色。

MenuItem menu1 = menu.add(0, 0, Menu.NONE, "Green");
MenuItem menu2 = menu.add(0, 1, Menu.NONE, "Black");
MenuItem menu2 = menu.add(0, 2, Menu.NONE, "Red"); //Make an item for red.
MenuItem menu3 = menu.add(0, 3, Menu.NONE, "Pixel Brush");
MenuItem menu4 = menu.add(0, 4, Menu.NONE, "Smooth Brush");

下一步,假设从你的代码是如何工作,它处理,它通过 fill 属性的 colours 。如果 fill 是 0,它是绿色的否则,它是黑色的。让我们添加一个案例 1 ,它会变成红色。

if (colours.fill == 1)
{
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.RED);
    ...
}
else if (colours.fill == 0)
{
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.GREEN);
    ...
}
else
{
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.BLACK);
    ...
}

我们也应该确保添加案例 Redbutton 点击代码区域︰

...
case 0:
    colours.fill = 0;
    return true;
case 1:
    colours.fill = 1;
    return true;
case 2:
    colours.fill = 2;
    return true;
case 3:
    colours.shape = 0;
    return true;
case 4:
    colours.shape = 1;
    return true;
...

你可能会把 Red 作为 2 和推刷 settings 进一步。这是为了确保颜色进行分组。

现在,这是所有我可以建议从你提供的代码。也许还有更多的它。但是你应该看看这。

赞助商