Пользовательский рисовальщик, рисующий за пределами экрана для новых входящих данных?
Я реализую визуализацию сигналов для микрофона в своем приложении.
class BarVisualizer extends CustomPainter {
final List<double> waveData;
BarVisualizer({
required this.waveData,
});
@override
void paint(Canvas canvas, Size size) {
for (var i = 0; i < waveData.length; i++) {
canvas.drawLine(Offset(i.toDouble() + i , 0),
Offset(i.toDouble() + i, -waveData[i]), wavePaint);
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
выше
Итак, мой вопрос: как я могу переместить ранее нарисованные линии обратно, чтобы нарисовать новые входящие значения децибел внутри экрана?
2 ответа
что я сделал, так это создал обратный вызов, когда определенное условие соответствует, и вызвал setState из этого вызова обратно к смещению, которое выглядит следующим образом:
for (var i = 0; i < waveData.length; i++) {
if ((spacing * i) + offset.dx > size.width * sizeCounter) {
callback();
}
canvas.drawLine(
Offset(-scrollOffset.dx + offset.dx + (spacing * i), 100),
Offset(-scrollOffset.dx + offset.dx + (spacing * i),
-waveData[i] + 100),
wavePaint);
}
теперь в пользовательском интерфейсе,
CustomPaint(
painter: Barpainter(
callback:(){
WidgetsBinding.instance!.addPostFrameCallback(
(timeStamp) {
setState(
() {
scrollOffset += Offset(width, 0);
sizeCounter++;
},
);
},
);
}
)
)
это добавляет дополнительное смещение, когда оно достигает конца экрана
Использовать