在Android 2.2上一次又一次地调用View的onDraw方法

时间:2010-12-31 09:18:13

标签: android charts ondraw

我是Android开发的新手,在尝试在View上实现图形绘图时遇到了一个棘手的问题。

我想要做的是在视图中绘制图表。我在ScrollView中放置一个View并覆盖View的onDraw方法并在onDraw中绘图。最重要的是图表需要滚动功能。 我重写的View的onDraw方法包括坐标计算和图表中的许多必要元素绘制(线,点,轴,标签等)。 你可以想象,我计算并绘制整个图表,不仅是可见区域,还包括整个区域,包括屏幕外。 现在的问题是当滚动ScrollView时,onDraw方法会一次又一次地被调用,因此它会导致性能问题并且滚动视图的运行速度非常慢。我试图找到一种方法来防止在第一次通话后调用onDraw,但没有幸运。一旦onDraw被调用,我必须一次又一次地计算同样的事情,这是不必要的。

你们有什么答案吗?感谢。

1 个答案:

答案 0 :(得分: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;