1 год назад
Ну и, как и было обещано- вот он- второй, более сложный вариант вывода рандомных точек на экран, тут уже не просто Canvas, а с применением SurfaceView package ru.p0006viewsnowanim2; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.graphics.Paint; import java.util.Random; public class MainActivity extends Activity {   @Override   protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(new DrawView(this));   }   class DrawView extends SurfaceView implements SurfaceHolder.Callback {    Paint p;    private DrawThread drawThread;    public DrawView(Context context) {    super(context);    p = new Paint();    getHolder().addCallback(this);    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width,    int height) {    }    @Override    public void surfaceCreated(SurfaceHolder holder) {    drawThread = new DrawThread(getHolder());    drawThread.setRunning(true);    drawThread.start();    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {    boolean retry = true;    drawThread.setRunning(false);    while (retry) {    try {    drawThread.join();    retry = false;    } catch (InterruptedException e) {    }    }    }    class DrawThread extends Thread {    private Random random;    private boolean running = false;    private SurfaceHolder surfaceHolder;    public DrawThread(SurfaceHolder surfaceHolder) {    this.surfaceHolder = surfaceHolder;    }    public void setRunning(boolean running) {    this.random = new Random();    this.running = running;    }    @Override    public void run() {    Canvas canvas;    while (running) {    canvas = null;    try {    canvas = surfaceHolder.lockCanvas(null);    if (canvas == null)    continue;    //здесь происходит рисование    int xscr=canvas.getWidth()  ;    int yscr=canvas.getHeight();    int schpics=0;    canvas.drawARGB(80, 102, 204, 255);    p.setColor(Color.BLACK);    // толщина линии    p.setStrokeWidth(7);    while(schpics<=50000){    schpics++;    p.setColor(Color.rgb(    random.nextInt(255),    random.nextInt(255),    random.nextInt(255)    ));    canvas.drawPoint(    random.nextInt(xscr),    random.nextInt(yscr), p);    }    } finally {    if (canvas != null) {    surfaceHolder.unlockCanvasAndPost(canvas);    }    }    }    }   }  } } Да уж! Хотел и сюда картинку скриншота работы установленной программы залить, однако, даже на картинку ругается- размер или формат не поддерживается - говорит, ну да ладно- этот 'снег' - он не многим отличается от предыдущего. Да, об особенностях программы- как можно увидеть в коде: while(schpics<=50000) - в этом цикле отрисовываются по многу точек за один проход, поскольку в отличии от процедурных языков - по точке за проход выводить тут не получится, верней- можно за морочиться- но надо будет так же отложенную отрисовку прикрутить по таймеру чтоб, а тут просто простенький пример работоспособного кода. То есть- за мгновение она заносит на холст практически полсотни рандомных точек, потом отрисовывает, и отрисовка- это более времязатратный момент для программы. Да, количество добавляемых точек можно менять, анимация при этом тоже заметно меняется, так же в коде можно найти -  p.setStrokeWidth(7) - тут задается толщина линии, в нашем случае, размер точек, его тоже можно менять, так же заметно меняет вид 'снега'
1 год назад
Java 1824. Как работает рандом в java
Для генерации случайных чисел в Java можно использовать класс java.util.Random. Этот класс имеет несколько методов для генерации случайных чисел. Например, для получения случайного значения типа int используется метод nextInt(). Рассмотрим пример генерации случайного числа: // Создаём экземпляр класса Random Random random = new Random(); int value = random.nextInt(); Метод nextInt() может принимать аргумент - верхнюю границу диапазона. В этом случае будет сгенерировано случайное число в...