【问题标题】:displaying custom surfaceview in main.xml在 main.xml 中显示自定义表面视图
【发布时间】:2012-02-01 20:58:08
【问题描述】:

我有一个自定义的surfaceview,我需要将它添加到我当前的main.xml 布局中。此表面视图用于流式传输相机实时视图。我在完成这项工作时遇到问题。

如果我运行代码没有问题

     cameraPreview = new HttpCameraPreview(this, null, viewWidth, viewHeight);
setContentView(cameraPreview);

但是,我不希望我的自定义表面视图成为主视图。我希望它成为我的 main.xml 中的表面视图。

希望得到一些建议/建议。我尝试参考此链接,但也没有帮助。 Draw SurfaceView from layout xml

谢谢!

main.xml的一部分如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent">
                    <ImageView
               android:id="@+id/preview_image_view"
               android:layout_height="wrap_content"
               android:layout_weight="3.0"
                   android:layout_width="fill_parent"
               />
<SurfaceView Class ="org.saboteur.nikonshooter.HttpCameraPreview"
android:layout_width="fill_parent" 
android:id="@+id/surface_preview" 
android:layout_height="10dip" 
android:layout_weight="3"/>

我的自定义surfaceview类部分代码如下:

  public class HttpCameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private static final String TAG = "test";
    private static final String url = "http://bijint.com/jp/tokei_images/0022.jpg";
    private CanvasThread canvasThread;

    private SurfaceHolder holder;
    private HttpCamera camera;

    private HttpCameraPreview mSurfaceView;

    private int viewWidth;
    private int viewHeight;

    public HttpCameraPreview(Context context, AttributeSet attributeSet, int viewWidth, int viewHeight) {
        super(context, attributeSet);
        Log.e("HttpCameraPreview", "inside HttpCameraPreview()");
        Log.e("HttpCameraPreview", "create surface view to r.id");


        try{
        holder = getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);
        this.viewWidth = viewWidth;
        this.viewHeight = viewHeight;
        canvasThread = new CanvasThread();
        catch (Exception e){
            Log.e("HttpCameraPreview", "--->Exception = "+e);
        }
    }

【问题讨论】:

  • 另一个问题:为什么我无法使用

标签: android surfaceview


【解决方案1】:

为什么不以编程方式将 HttpCameraView 添加到 main.xml 中的布局中。给你的 LinearLayout 一个像“@+id/parent_view”这样的 id,然后通过

调用它
LinearLayout parentView = (LinearLayout) findViewById(R.id.parent_view);
cameraPreview = new HttpCameraPreview(this, null, viewWidth, viewHeight);
parentView.addView( cameraPreview );

【讨论】:

  • 您可能需要一个属性集。给它一些 LinearLayout.LayoutParams 而不是 null 因为每个视图都需要一个 layout_width 和 layout_height
  • 嗨,我必须传递一个属性集,我可以只传递上下文吗?因为我不确定要传递什么属性。
  • 只能传context,但是接下来需要在自定义类中设置布局参数。 developer.android.com/reference/android/widget/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多