我需要在Surfaceview上以15fps的速度绘制位图,我的SurfaceView如下所示
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中工作。
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时,表面视图显示为绿色,仅此而已。
有人能告诉我哪里出问题了吗?
发布于 2014-11-06 01:49:44
SurfaceView包含两个部分,即曲面和视图。视图是与UI的其余部分一起绘制的,但通常只是一个用于布局目的的透明“孔”。曲面显示在UI下方的单独图层上。
看起来你是在把视频帧写到Surface上,然后用绿色的实心视图覆盖它们。删除onDraw()函数(为View part获取画布),并在doDraw()中执行所有操作(为Surface part获取画布)。
https://stackoverflow.com/questions/26758639
复制相似问题