Я создал расширенный класс SurfaceView для предварительного просмотра камеры.Как вы используете расширенный класс в XML-макете?
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
CameraPreview(Context context) {
super(context);
mHolder = this.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, acquire the camera and tell it where
// to draw.
try {
mCamera = Camera.open();
mCamera.setPreviewDisplay(holder);
} catch (Exception e){
Log.wtf("surfaceCreated", e.toString());
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
try {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
} catch (Exception e){
Log.wtf("surfaceDestroyed", e.toString());
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
try {
Camera.Parameters parameters = mCamera.getParameters();
// parameters.setPreviewSize(w, h);
// parameters.setPreviewSize(222, 222);
mCamera.setParameters(parameters);
mCamera.startPreview();
} catch (Exception e){
Log.wtf("surfaceChanged", e.toString());
}
}
}
Он работает как полноэкранный предварительный просмотр при использовании в деятельности, как это:
public class CameraActivity extends Activity {
CameraPreview mPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mPreview = new CameraPreview(this);
setContentView(mPreview);
}
}
Когда я пытаюсь использовать его в макет XML файл, он дает ClassNotFoundException.
<CameraPreview class="com.xxxxxx.camera3.CameraPreview"
android:layout_width="260dp"
android:layout_height="260dp"
android:id="@+id/surfaceView"
android:background="#ff404040"
android:layout_gravity="center_horizontal"/>
Что нужно сделать, чтобы заставить его работать? Как я могу поместить предварительный просмотр камеры в SurfaceView?
Кроме того, вам потребуется реализовать двухпараметрический конструктор на вашем «CameraPreview», который принимает «Контекст» и «АтрибутСеть». – CommonsWare
Извините, Лукас, но это делает InflateException. Активность, показанная выше, является просто испытанием. – Ranandar
Вы делали то, что говорили об общем? –