Метод Android onDraw вызывается снова и снова на Android 2.2

1

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

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

Есть ли у вас ответ? Спасибо.

Теги:
charts
ondraw

1 ответ

0

Вы можете использовать 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;
  • 0
    Я надеюсь, что вы их не используете, поскольку они не являются открытыми API. Общедоступные API для получения смещения прокрутки: developer.android.com/reference/android/view/…
  • 0
    Вы имеете в виду, что мне все еще нужно пересчитать видимую область? Я предпочитаю, чтобы он вычислялся только один раз после того, как представление, впервые показанное пользователю, потому что весь холст все время остается неизменным, пока пользователь его прокручивает, и я думаю, что тратится время на его пересчет, и на самом деле это вызывает проблему с производительностью, даже если Я просто рисую прямоугольник на нем. Есть ли способ избежать расчета снова и снова при прокрутке?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню