Я создал операцию, которая вызывает DrawView extends View, я рисую на Canvas что-то вроде двоичного дерева. Размер холста больше размера экрана, а функция onDraw рисует все холст, а не только видимую его часть. Я добавил горизонтальный и вертикальный scrollView, и, очевидно, onDraw вызывается снова и снова, чтобы обновить представление. Мне было интересно, могу ли я рисовать холст на изображении (растровое изображение или что-то в этом роде), используя это изображение, чтобы показать дерево, не требуя вызова функции onDraw. Если я не могу этого сделать, что я могу сделать, чтобы получить более быстрый вид?
Технически холст рисует растровое изображение. Так что это на самом деле битмап, который больше, чем экран. Почему вы делаете битмап больше экрана? Больше битмапов = больше использования памяти - что может немного замедлить работу. Вы только на самом деле рисуете в обрезанных границах экрана - вы можете подумать, что вы забираете экран, но это не так. Опираясь на другой битмап, вам это не поможет - вы уже это делаете. Не смотря на свой код, вы можете попробовать:
invalidate(rect)
который только перерисовывает то, что изменилосьЕсли вы используете API 11 или выше, вы можете попробовать использовать атрибут аппаратного ускорения в теге приложения в манифесте.
<application ... android:hardwareAccelerated="true" ...>
Помимо этого вы можете рассмотреть возможность использования другого рендеринга, кроме View, посмотрите также SurfaceView.
Как правило, я думаю, что вы не должны переопределять View, если вы не создаете компонент пользовательского интерфейса (например, кнопку), но не цитируйте меня на этом.