Есть много похожих вопросов, и поэтому это может показаться дубликатом, но, пожалуйста, прочитайте сначала.
Я прошел через все следующие вопросы, и он не работал для меня
- onDraw () не вызывается в пользовательском представлении
- сделать недействительным представление без перерисовки на API 25
- Android Пользовательский макет - onDraw () никогда не вызывается
- view.invalidate () не работает для перерисовки изображения
- Почему onDraw не вызывается после invalidate ()?
- Android Просмотр Canvas onDraw не выполнен
Позвольте мне уточнить далее
- I Я расширяю класс View, а не любую ViewGroup, такую как LinearLayout et c
- , когда я вызываю
invalidate()
из onTouchEvent
, он работает нормально - , когда я вызываю
invalidate()
из другой функции того же класс (undo()
) invalidate()
не работает - Я также пытался вызвать
postInvalidate()
, а также вызывал инвалидацию с использованием postDelayed(new Runnable ... invalidate()
, кажется, ничего ork. - после прикосновения к кнопке отмены, когда я касаюсь вида. dr aws ожидаемый результат немедленно.
Любое предложение о том, в чем может быть проблема?
код выглядит примерно так:
public boolean undo() {
if (undoStack.isEmpty()) return false;
redoStack.push(undoStack.pop());
if (redoStack.size() >= MAX_STACK_SIZE) redoStack.removeElementAt(0);
// invalidate();
postInvalidate();
return true;
}
здесь undoStack содержит предыдущие растровые изображения, которые были нарисованы
Я могу сказать, что отмены и onDraw работают нормально, так как я получаю ожидаемые результаты при касании просмотр после нажатия на кнопку отмены. Также я вызываю эту функцию из основного потока, а не из фонового потока или задачи asyn c.
Любые предложения, пожалуйста. Заранее спасибо.