首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Canvas#drawBitmap正在阻挠Canvas#drawPath in SurfaceView

Canvas#drawBitmap正在阻挠Canvas#drawPath in SurfaceView
EN

Stack Overflow用户
提问于 2012-06-20 13:33:01
回答 1查看 811关注 0票数 1

我有一个SurfaceView,它必须在两个位图之间或上方绘制一条路径。我是动画画的路径,这样它将似乎增长到全尺寸。这段代码适用于,提供了我不绘制位图的

指定位图(在onLayout(...)中,以获取View维数)如下:

代码语言:javascript
复制
mFrontBitmap = Bitmap.createBitmap((int) width, (int) height, mConfig);
Canvas temp = new Canvas(mFrontBitmap);
temp.drawColor(Color.TRANSPARENT, Mode.CLEAR);

(我正在擦拭它们,以免留下任何侥幸的机会。)然后,SurfaceView线程的run方法中的绘制代码是

代码语言:javascript
复制
if(mCurrentLayer==Layer.BACK) {
    //draw path
    if(mPath!=null)
    canvas.drawPath(mPath, mPaint);
}

canvas.drawBitmap(mBackBitmap, 0, 0, null);

if(mCurrentLayer==Layer.MIDDLE) {
    //draw path
    if(mPath!=null)
        canvas.drawPath(mPath, mPaint);
}

canvas.drawBitmap(mFrontBitmap, 0, 0, null);

if(mCurrentLayer==Layer.FRONT) {
    //draw path
    if(mPath!=null)
        canvas.drawPath(mPath, mPaint);
}

在注释掉这两行drawBitmap后,动画呈现得很好。有了它们,在动画完成之前,我什么也看不见,然后路径被直接呈现到其中一个位图上。我有点不知所措。我看过LunarLander示例,它呈现了一个背景位图,所以这显然是SurfaceView可以做的事情,但对我来说它不会,它会是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2012-06-20 14:05:55

为了每次需要位图的内容,您可以在每次执行canvas.drawPath(.)时使用此方法:

代码语言:javascript
复制
mpath.invalidate();

(我假设mpath是视图/表面视图)。

所以看起来是这样:

代码语言:javascript
复制
if(mCurrentLayer==Layer.BACK) {
    //draw path
    if(mPath!=null) {
        canvas.drawPath(mPath, mPaint);
        mPath.invalidate();
    }
}

canvas.drawBitmap(mBackBitmap, 0, 0, null);

if(mCurrentLayer==Layer.MIDDLE) {
    //draw path
    if(mPath!=null) {
        canvas.drawPath(mPath, mPaint);
        mPath.invalidate();
    }
}

canvas.drawBitmap(mFrontBitmap, 0, 0, null);

if(mCurrentLayer==Layer.FRONT) {
    //draw path
    if(mPath!=null) {
        canvas.drawPath(mPath, mPaint);
        mPath.invalidate();
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11120793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档