Android中带有片段的SurfaceView和重叠视图
在我的应用程序中,我使用一个自定义SurfaceView从相机中检索图片,然后使用一个自定义视图在使用画布绘制附加功能后将其打印到屏幕上。这两个类已创建并添加到活动中的布局中:Android中带有片段的SurfaceView和重叠视图,android,android-layout,android-fragments,android-view,Android,Android Layout,Android Fragments,Android View,在我的应用程序中,我使用一个自定义SurfaceView从相机中检索图片,然后使用一个自定义视图在使用画布绘制附加功能后将其打印到屏幕上。这两个类已创建并添加到活动中的布局中: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myView = new MyView(this); mySurfaceView = new MySurf
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView = new MyView(this);
mySurfaceView = new MySurfaceView(this, myView);
setContentView(mySurfaceView);
addContentView(myView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
然后使用
表面更改和表面处理方法:
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = mCamera.getParameters();
...
mCamera.setParameters(parameters);
mCamera.startPreview();
}
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try{
mCamera.setPreviewDisplay(holder);
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
...
System.arraycopy(data, 0, myView.cameraData, 0, data.length);
myView.invalidate();
}
});
}catch(Exception e){
mCamera.release();
mCamera = null;
}
}
一切都很好。。。直到我决定将以上所有内容放在一个片段中,以便在同一个应用程序中使用两个不同的视图。在教程之后,我将这两个类放在片段中,而不是活动中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView = new MyView(this);
mySurfaceView = new MySurfaceView(this, myView);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mySurfaceView = (MySurfaceView)inflater.inflate(R.layout.camera_view, null);
return mySurfaceView;
}
而XML布局为:摄影机碎片(我还不关心另一个碎片):
摄像机视图:
<?xml version="1.0" encoding="utf-8"?>
<view xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.example.mypackage.MySurfaceView" >
</view>
通过代码的片段版本,我可以轻松地看到SurfaceView,但我似乎无法在屏幕上打印视图应该绘制的功能。没有报告错误代码,但程序似乎从未输入setPreviewCallback,然后输入onPreviewFrame方法。我不知道这是因为我如何实例化类,还是因为我如何声明布局,或者两者兼而有之。你能找到答案吗?如果你这样做了,这个问题的答案将非常有用!谢谢不幸的是,还没有。我现在已经把这些碎片放在一边,我将继续框架布局。如果我能找到解决方案,我肯定会把它贴在这里:)
<?xml version="1.0" encoding="utf-8"?>
<view xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.example.mypackage.MySurfaceView" >
</view>