1

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

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

各位有什么答案吗?谢谢。

4

1 回答 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;
于 2010-12-31T09:30:36.307 回答