Метод Android onDraw вызывается снова и снова на Android 2.2 - PullRequest
1 голос
/ 31 декабря 2010

Я новичок в разработке под Android и столкнулся с трудной проблемой при попытке реализовать графический рисунок в View.

Что я хочу сделать, так это нарисовать диаграмму в виде. Я помещаю View в ScrollView, переопределяю метод OnDraw и делаю рисование в onDraw. Самое главное, что диаграмме нужны функции прокрутки. Переопределенный метод View onDraw включает в себя вычисление координат и рисование многих необходимых элементов (линии, точки, оси, метки и т. Д.) В диаграмме. Как вы можете себе представить, я рассчитываю и рисую всю диаграмму не только видимую область, но и всю область, включая закадровый. Теперь проблема в том, что метод onDraw вызывается снова и снова, когда я прокручиваю ScrollView, так что это вызывает проблему с производительностью, а представление прокрутки работает очень медленно. Я пытался найти способ предотвратить вызов onDraw после первого вызова, но не повезло. Я должен вычислять то же самое снова и снова, когда вызывается onDraw, что не нужно.

Ребята, у вас есть ответ? Спасибо.

1 Ответ

0 голосов
/ 31 декабря 2010

Вы можете использовать mScrollX и mScrollY, чтобы вычислить, какую видимую часть холста необходимо перерисовать.

 /**
 * The offset, in pixels, by which the content of this view is scrolled
 * vertically.
 * {@hide}
 */
@ViewDebug.ExportedProperty
protected int mScrollY;

/**
 * The left padding in pixels, that is the distance in pixels between the
 * left edge of this view and the left edge of its content.
 * {@hide}
 */
@ViewDebug.ExportedProperty
protected int mPaddingLeft;
/**
 * The right padding in pixels, that is the distance in pixels between the
 * right edge of this view and the right edge of its content.
 * {@hide}
 */
@ViewDebug.ExportedProperty
protected int mPaddingRight;
/**
 * The top padding in pixels, that is the distance in pixels between the
 * top edge of this view and the top edge of its content.
 * {@hide}
 */
@ViewDebug.ExportedProperty
protected int mPaddingTop;
/**
 * The bottom padding in pixels, that is the distance in pixels between the
 * bottom edge of this view and the bottom edge of its content.
 * {@hide}
 */
@ViewDebug.ExportedProperty
protected int mPaddingBottom;
...