我是Android开发的新手,在尝试在View上实现图形绘图时遇到了一个棘手的问题。
我想要做的是在视图中绘制图表。我在ScrollView中放置一个View并覆盖View的onDraw方法并在onDraw中绘图。最重要的是图表需要滚动功能。 我重写的View的onDraw方法包括坐标计算和图表中的许多必要元素绘制(线,点,轴,标签等)。 你可以想象,我计算并绘制整个图表,不仅是可见区域,还包括整个区域,包括屏幕外。 现在的问题是当滚动ScrollView时,onDraw方法会一次又一次地被调用,因此它会导致性能问题并且滚动视图的运行速度非常慢。我试图找到一种方法来防止在第一次通话后调用onDraw,但没有幸运。一旦onDraw被调用,我必须一次又一次地计算同样的事情,这是不必要的。
你们有什么答案吗?感谢。
答案 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;