如何在相机预览中添加按钮
How to add buttons on camera preview
我是 Android 的新手,我正在尝试构建相机应用程序。
我构建了一个相机预览,它扩展了 SurfaceView 并实现了 SurfaceHolder.Callback 以在相机 Activity 上预览相机。
这是承包商:
public CameraPreview(Context context) {
super(context);
mContext = context;
mStartRequested = false;
mSurfaceAvailable = false;
mCamera = null;
mHolder = getHolder();
mHolder.addCallback(this);
}
和初始化布局的 onCreate(in CameraActivity.java) 方法:
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_camera);
mPreview = new CameraPreview(this);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
最后是布局 XML :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<FrameLayout
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="center_horizontal|bottom" />
</FrameLayout>
</LinearLayout>
AndroidMainifest.xml:
<application
...
android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" >
如您所见,我尝试在 相机预览中添加一个按钮,但当应用正在运行时我看不到该按钮。
有人能看出错误吗??
谢谢!
预览可能在按钮的顶部(在 Z 顺序中)。这一行:
preview.addView(mPreview);
将 CameraPreview 添加到 FrameLayout 的内部子视图列表的 end。 FrameLayout 按顺序呈现其子视图;因此,预览是在按钮之后绘制的,或者 "over" 它。试试这个:
preview.addView(mPreview, 0);
您也可以通过使用具有完全限定的 class 名称的标签从 XML 扩展来订购您的 CameraPreview,如下所示:
<com.yourdomain.CameraPreview
.../>
...尽管您需要覆盖 View(Context context, AttributeSet attrs);使这项工作的构造函数。
我是 Android 的新手,我正在尝试构建相机应用程序。 我构建了一个相机预览,它扩展了 SurfaceView 并实现了 SurfaceHolder.Callback 以在相机 Activity 上预览相机。 这是承包商:
public CameraPreview(Context context) {
super(context);
mContext = context;
mStartRequested = false;
mSurfaceAvailable = false;
mCamera = null;
mHolder = getHolder();
mHolder.addCallback(this);
}
和初始化布局的 onCreate(in CameraActivity.java) 方法:
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_camera);
mPreview = new CameraPreview(this);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
最后是布局 XML :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<FrameLayout
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="center_horizontal|bottom" />
</FrameLayout>
</LinearLayout>
AndroidMainifest.xml:
<application
...
android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" >
如您所见,我尝试在 相机预览中添加一个按钮,但当应用正在运行时我看不到该按钮。 有人能看出错误吗??
谢谢!
预览可能在按钮的顶部(在 Z 顺序中)。这一行:
preview.addView(mPreview);
将 CameraPreview 添加到 FrameLayout 的内部子视图列表的 end。 FrameLayout 按顺序呈现其子视图;因此,预览是在按钮之后绘制的,或者 "over" 它。试试这个:
preview.addView(mPreview, 0);
您也可以通过使用具有完全限定的 class 名称的标签从 XML 扩展来订购您的 CameraPreview,如下所示:
<com.yourdomain.CameraPreview
.../>
...尽管您需要覆盖 View(Context context, AttributeSet attrs);使这项工作的构造函数。