Android: способ случайного выбора атрибутов - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть простая программа для рисования простых фигур холстом.

private class MyViewCircle extends View {

    public MyViewCircle(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.RED);
        canvas.drawCircle(89, 150, 30, paint);
    }

}

Как видите, атрибуты круга:

(Color.RED); 
(89, 150, 30, paint);

Я хочу, чтобы созданный другой класс включал в себя множество других функций (цветов и координат) и выбирал их случайным образом. Итак, какой путь лучше, массив или arraylist или что-то еще? Может ли кто-нибудь дать мне пример, как это сделать? Тогда как их случайно выбрать и поместить в функцию рисования? Ура!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2011

Попробуйте создать простой Java-объект, содержащий все атрибуты, затем добавьте их в один список и выберите случайный элемент:

class MyAttributes {
    int color;
    int x, y;
    int radius;

    public MyAttributes(int color, int x, int y, int radius) {
        this.color = color;
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
}

В вашем классе просмотра:

private List<MyAttributes> mAttributes;
private Random mRandom;

public MyViewCircle(Context context) {
    mRandom = new Random();
    mAttributes = new ArrayList<MyAttributes>();

    mAttributes.add(new MyAttributes(Color.RED, 80, 70, 199));
    mAttributes.add(new MyAttributes(Color.BLUE, 50, 170, 88));
}


@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint();
    paint.setAntiAlias(true);

    int randomPosition = mRandom.nextInt(mAttributes.size());
    MyAttributes randomAttr = mAttributes.get(randomPosition);

    paint.setColor(randomAttr.color);
    canvas.drawCircle(randomAttr.x, randomAttr.y, randomAttr.radius, paint);
}
0 голосов
/ 23 ноября 2011

Как правило, на Android я всегда стремлюсь использовать массив вместо использования ArrayList для производительности.

Для случайного выбора можно использовать метод Math.random() или объект util.Random. Используя любой из них, вы можете сгенерировать значение индекса и прочитать данные из массива с этим индексом.

Должно быть довольно просто, поэтому я не буду писать код, если вам это действительно не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...