Я разрабатываю приложение, которое рисует более или менее двумерную матрицу значений на холсте.Значения этой матрицы масштабируются до альфа-уровней, чтобы проиллюстрировать интенсивность, а координаты матрицы просто экстраполируются из индексов строк и столбцов.Ниже моя подпрограмма onDraw.
public void onDraw(Canvas canvas, float [][] spectrum, float nsegs,int seglen) {
//canvas.translate(0,0);
//alpha = 0;
int canHeight = canvas.getHeight();
int canWidth = canvas.getWidth();
//float[] array = generateData(512);
float [] spec = new float[seglen];
final float bw = (float)(canWidth-2)/nsegs;
final float bh = (float)(canHeight-2)/(float) seglen;
for (int i = 0;i<seglen;i++){
spec[i] = spectrum[i][index]; // One column at a time
}
float max = maxVal(spec);
float min = minVal(spec);
xcoor = index;
for (int n = 0; n < seglen; n++){
//Scale value to alpha (0-255)
alpha =(int)Math.round((((spec[n] - min)/max)*255.0));
ycoor = n;
paint.setAlpha(alpha);
canvas.drawPoint(xcoor,ycoor, paint);
}
index = (int) (index +1);
if (index == nsegs-1){
index = 0;
}
}
Здесь конфигурация рисования предопределена как:
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
paint.setStrokeWidth(2);
Эта программа рисует один пиксель за раз, заполняет один столбец пикселей, равныйколичество элементов в столбце матрицы.Затем он начинается со следующего столбца, где предыдущий столбец все еще отображается, и так далее.На этом этапе, когда все столбцы заполнены, он снова начинается с первого столбца, рисуя поверх предыдущих элементов.
Проблема: Хвостовые колонки, хотя уже нарисованы, кажутся мерцающими и прыгают, как и Альфа.Я попытался использовать canvas.save () и canvas.restore (), чтобы захватить весь холст и восстановить его после печати столбца.Я дважды проверил все мои индексации строк и столбцов и альфа-значения, чтобы гарантировать приращение координат согласно желанию (и они делают).Это очень похоже на пример APIdemo DrawPoints.java, однако есть три основных отличия.
- Я использую DrawPoint, а не DrawPoints, и
- Я не использую "canvas.setColour", так как он удаляет хвостовые столбцы с холста.
- ЭтоФункция onDraw работает в потоке, который расширяет SurfaceView
Любая идея будет принята с благодарностью, спасибо за ваше время.