Android SurfaceView onDraw Вопрос - PullRequest
4 голосов
/ 21 июня 2011

Метод onDraw моего SurfaceView отображает список путей LinkedList, определенных TouchEvents на экране. Я хочу добавить функцию отмены, которая удаляет последний путь узла из LinkedList. При нажатии кнопки путь удаляется из списка, но SurfaceView не обновляется, пока я не нажму кнопку отмены еще раз или не коснусь экрана.

Спасибо, Eric

Ответы [ 2 ]

3 голосов
/ 31 мая 2012

OnDraw вызывается каждые 60 мс в потоке, но там не обновляется что меня смущает.

вы должны использовать:

postInvalidate();

не

invalidate();

postInvalidate(); указывает основному потоку пользовательского интерфейса перерисовать в следующий удобный момент. То, как вы это делаете, не будет работать в отдельном потоке.

0 голосов
/ 21 июня 2011

Это связано с тем, что представления обновляются только при вызове onDraw (), что происходит из-за активности на экране (например, касаясь ее) или когда это делается программно.

Вы хотите форсировать это: используйте метод invalidate (), унаследованный от View.

Если удаление происходит внутри вашего SurfaceView, просто напишите invalidate () ПОСЛЕ того, как вы закончите удаление. Если это происходит снаружи, тогда просто сделайте surfaceViewInstance.invalidate ().

Надеюсь, это поможет

...