surfaceview,surfaceview黑屏

http://www.itjxue.com  2023-01-05 20:32  来源:未知  点击次数: 

android camera2 用surfaceview输出预览图像画面拉长

项目当中遇到调整摄像头位置需要全屏显示摄像头预览界面,过程中发现预览界面存在无法显示全,画面被拉伸的问题。surfaceview的宽高比可能与camera设置的宽高比不一致 ,经测试发现设置Camera 预览宽高可解决此问题(注意这里设置屏幕物理宽高不起作用,必须设置屏幕分辨率)

////通过Resources获取(无效)

// DisplayMetrics dm = getResources().getDisplayMetrics();

// heigth = dm.heightPixels;

// width = dm.widthPixels;

//获取屏幕的默认分辨率 设置预览界面长宽解决预览界面变形显示不全问题(有效)

Display display = getWindowManager().getDefaultDisplay();

int height = display.getWidth();

int width = display.getHeight();

Camera.Size preSize = CameraUtil.getCloselyPreSize( true , width, height, parameters.getSupportedPreviewSizes());

parameters.setPreviewSize(preSize.width, preSize.height);

Log.e(TAG + "摄像头尺寸前置" , "width" + preSize.width + "------" + "height" + preSize.height);

camera2.setParameters(parameters);

// 启动摄像头预览

camera2.startPreview();

System.out.println( "camera.startpreview" );

android画图一定要继承view或surfaceView,在线程里一直画吗?

第一,不一点用surfaceview,亦可继承view;第二,是不是画一次,或者多次,由你代码控制第三,ondraw是一个回调函数,canvas为空,证明你调用有错

查看原帖

安卓中surfaceview播放完后,怎么恢复无图像状态

import android;/使屏幕保持高亮状态

}

@Override//.id.View;

}else{

if(pause){

mediaPlayer;取的文件路径

path = file;

private SurfaceView surfaceView.media.setFixedSize(176;

case R;

/,如存在重新播放

if(path.getHolder().start().os.media.MediaPlayer.string.Toast.setType(SurfaceHolder.id;

/:

if(mediaPlayer;

File file = new File(Environment.id.File;/.prepare().setDisplay(surfaceView.getHolder();deprecation".Environment.pausebutoon.seekTo(0);

import android;

}

Android中View,SurfaceView的绘图和GLSurfaceView绘图有区别吗

Android游戏当中主要的除了控制类外就是显示类View。SurfaceView是从View基类中派生出来的显示类。android游戏开发中常用的三种视图是:

view、SurfaceView和GLSurfaceView的区别如下:

View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。

SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。

GLSurfaceView:基于SurfaceView视图再次进行拓展的视图类,专用于3D游戏开发的视图;是SurfaceView的子类,openGL专用。

在2D游戏开发中,大致可以分为两种游戏框架,View和SurfaceView。

View和SurfaceView区别:

View:必须在UI的主线程中更新画面,用于被动更新画面。

surfaceView:UI线程和子线程中都可以。在一个新启动的线程中重新绘制画面,主动更新画面。

UI的主线程中更新画面 可能会引发问题,比如更新画面的时间过长,那么自己的主UI线程会被正在画的函数阻塞。那么将无法响应按键,触屏等消息。

当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞自己的UI主线程。但这也带来了另外一个问题,就是事件同步,涉及到线程同步。

所以基于以上,根据游戏特点,一般分成两类。

1 被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

2 主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。

(责任编辑:IT教学网)

更多

推荐Flash动画制作教程文章