2010-12-31 2 views
1

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

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

У вас есть ответ? Благодарю.

ответ

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 для извлечения смещения прокрутки: http://developer.android.com/reference/android/view/View.html#getScrollX() – hackbod

+0

Вы имеете в виду, что мне еще нужно пересчитать видимую область? Я предпочитаю, чтобы он был рассчитан только один раз после первого представления пользователю, потому что весь холст одинаковый все время, пока пользователь просматривает его, и я думаю, что он тратит время на его пересчет, и на самом деле это вызывает проблему производительности, даже если Я просто нарисую на нем прямоугольник. В любом случае, чтобы избежать вычисления этого снова и снова при прокрутке? –

Смежные вопросы