我能有多个绘制方法吗?



我已经创建了自己的画布类,它扩展了一个imageView。我的onDraw()方法绘制出用户的gps位置,每次用户移动时我都会调用这个onDraw方法。我的问题是,我也想画出一个gps轨迹,只需要绘制一次(不需要在用户移动时更新)。我想知道是否有可能有超过1个onDraw方法,或者是否有任何方法分离1)用户位置和2)gps轨迹?

我的理由是我不想浪费内存重画gps路线每次用户gps位置的变化。

您是否看到性能受到影响?如果没有,不要担心。我认为这是在浪费CPU周期。没有记忆。因此,如果应用程序看起来已经足够快了,不要担心优化它。

如果你的应用有点滞后,你已经发现路径是瓶颈…我建议将其缓存到位图中。这样,您仍然需要绘制轨迹,但您不必计算每一帧上轨迹的坐标。

我最近不得不解决一个有点类似的问题,我将简要地解释一下我是怎么做的,以防对您有所帮助。

你能做的是使用多个重叠的视图,其中一个视图可能包含你不想经常重画的背景图形,而一个前景视图包含经常更新的图形。然后,为了获得性能,您可以设计背景视图的onDraw(),使其由位图支持,然后将其保留为类变量。在你的背景图形的第一个onDraw(),你做相对缓慢的绘图到画布。在随后对onDraw()的调用中,您只需将该位图绘制到画布上。

我自己刚做过。基本上,我的应用程序所做的是显示一些图形仪表。这些量规有许多只绘制一次的图形(量规面、数字图例),指针图形需要随着模型数据的变化而反复重新绘制。首先,我将背景图形和移动前景图形拆分为单独的重叠视图。现在,无效和重绘前景指针图形当然会导致它重叠的任何东西也无效,因此每次重绘指针视图时都会调用背景图形视图的onDraw()方法。背景视图只需要绘制背景图形一次,但保留支持画布的位图,并在随后的onDraw()调用中将该位图绘制回画布(这比最初使用Path()对象创建图形要快得多)。

Bitmap bm;

....
protected void onDraw(Canvas canvas){
    if(null==bm){
        bm=Bitmap.createBitmap(getMeasuredWidth(),getMeasuredHeight(),Bitmap.Config.ARGB_8888);
        // do your slow vector graphics drawing to Canvas here
    }
    Paint drawPaint = new Paint();
    drawPaint.setAntiAlias(false);
    drawPaint.setFilterBitmap(false);
    drawPaint.setDither(false);
    canvas.drawBitmap(bm, 0, 0, drawPaint);
}

嗯,不能有超过1个onDraw方法,假设我正确理解了你的问题。你需要考虑如何处理这个问题的替代方法。

@DeeV建议,这可能是你的解决方案。

最新更新