首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Canvas.drawBitmap或Canvas.drawColor不工作

Canvas.drawBitmap或Canvas.drawColor不工作
EN

Stack Overflow用户
提问于 2014-11-05 21:40:05
回答 1查看 909关注 0票数 0

我需要在Surfaceview上以15fps的速度绘制位图,我的SurfaceView如下所示

代码语言:javascript
复制
public class RawVideoViewSV extends SurfaceView implements SurfaceHolder.Callback{

private boolean isSurface;
private Bitmap mBitmap;
private SurfaceHolder holder;

public RawVideoViewSV(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
     holder = getHolder();
     holder.addCallback(this); 
}


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub
    isSurface = false;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    isSurface = true;
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    isSurface = false;
}

public SurfaceHolder getSurfaceHolder(){
    return holder;
}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    if(isSurface){
        canvas.drawColor(Color.GREEN);
        if(mBitmap != null)
            canvas.drawBitmap(mBitmap, 0, 0, null);
    }
}


public void doDraw(Canvas canvas,Bitmap bmp) {
    // TODO Auto-generated method stub
    System.out.println("RawVideoViewSV---> doDraw isSurface = " + isSurface + bmp.getHeight());
    Rect source = new Rect(0, 0, bmp.getWidth(), bmp.getHeight());
    if(isSurface){
        canvas.drawColor(Color.GREEN);
        if(bmp != null)
            canvas.drawBitmap(bmp, null,source, null);
    }
}}

在我的活动中,我创建了位图,并将其传递到Surface上进行绘制,但由于某种原因,canvas.drawcolor和canvas.drawbitmap都无法在surfacview中工作。

代码语言:javascript
复制
rawVideoViewSV0 = (RawVideoViewSV) findViewById(R.id.videoRawViewSV0);
Bitmap bmpx = Bitmap.createBitmap(rgb, videoSample.getWidth(),
videoSample.getHeight(),Bitmap.Config.ARGB_8888);
    Canvas mCanvas = null;
    SurfaceHolder mHolder = rawVideoViewSV0.getHolder();

    try {
        mCanvas = mHolder.lockCanvas();
        synchronized (mHolder) {    
            rawVideoViewSV0.doDraw(mCanvas,bmpx);
        }
    } finally {                   
        if (mCanvas != null) {
            mHolder.unlockCanvasAndPost(mCanvas);
        }
    }

rawVideoViewSV0的类型为RawVideoViewSV。我已经验证了我的位图不是空的,只是在第一次调用onDraw时,表面视图显示为绿色,仅此而已。

有人能告诉我哪里出问题了吗?

EN

回答 1

Stack Overflow用户

发布于 2014-11-06 01:49:44

SurfaceView包含两个部分,即曲面和视图。视图是与UI的其余部分一起绘制的,但通常只是一个用于布局目的的透明“孔”。曲面显示在UI下方的单独图层上。

看起来你是在把视频帧写到Surface上,然后用绿色的实心视图覆盖它们。删除onDraw()函数(为View part获取画布),并在doDraw()中执行所有操作(为Surface part获取画布)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26758639

复制
相关文章

相似问题

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