И вот, на данный момент решил воссоздать на Java программку- заполнение экрана цветными точками. На ассемблере- результат похож на отсутствие сигнала на старых телевизорах, так называемый снег. Программа наглядно демонстрирует быстродействие, однако с Java все оказалось куда сложнее!
Да, разобрался- как создавать Canvas, как добавлять на него дополнительные элементы- точки, линии, круги, прямоугольники, даже разобрался с динамической перерисовкой (invalidate()), однако при таком подходе- по экрану скачет одна точка, каждый раз появляясь в новом месте и исчезая в прежнем.
В общем- нашел так называемый path- в нем можно рисовать- почти как на канвасе, только как точку нарисовать в нем не нашел, пришлось рисовать круги. И, еще одно огорчение- с path-ем, он сохраняет черно-белую картинку, цвет задается от канваса при перерисовке:
int rndR=new Random().nextInt(255);
int rndG=new Random().nextInt(255);
int rndB=new Random().nextInt(255);
// p.setColor(Color.argb(200,rndR,rndG,rndB));
...
canvas.drawPath(path,p);
Строка задания цвета закомментирована, но оставлена, долго искал- как задать RGB по значениям, а в результате получилась не куча цветных точек, а белые круги, постепенно заполняющие экран белым, а при раскомментировании задания цвета- та часть картинки- что не черная еще и начинает мерцать - на всю картинку лишь два цвета.
Ну чтож, будем учиться и искать дальше.
А пока вот, это недоразумение, но работающее- результат работы программы- маленькие белые круги- не очень быстро но таки заполняют 'экран белым. Ну... хоть динамика в картинке уже есть.
И да, проект для проверки кода и работы программы можете назвать как угодно и package указать свою, однако, вместо первой строки тогда - там где package - свою package и укажите, иначе не заработает.
package ru.animmyanimrnd;
import android.app.Activity;
import android.os.Bundle;
import android.graphics.Canvas;
import android.view.View;
import android.content.Context;
import android.graphics.Paint;
import java.util.Random;
import android.graphics.Color;
import android.graphics.Path;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new DrawView(this));
}
class DrawView extends View {
Paint p;
Path path;
public DrawView(Context context){
super(context);
p = new Paint();
path= new Path();
}
protected void onDraw(Canvas canvas){
// заливка канвы цветом
//canvas.drawARGB(80, 102, 204, 255);
p.setStrokeWidth(1);
int xscr=canvas.getWidth() ;
int yscr=canvas.getHeight();
int rndX=new Random().nextInt(xscr);
int rndY=new Random().nextInt(yscr);
int rndR=new Random().nextInt(255);
int rndG=new Random().nextInt(255);
int rndB=new Random().nextInt(255);
// p.setColor(Color.argb(200,rndR,rndG,rndB));
// canvas.drawPoint(rndX, rndY, p);
// canvas.drawPoint(100,100,p);
path.addCircle(100,100, 10,Path.Direction.CW);
path.addCircle(rndX,rndY, 10,Path.Direction.CW);
path.close();
canvas.drawPath(path,p);
p.setColor(Color.WHITE);
invalidate();
}
}
}
2 минуты
21 апреля 2024