11

サーフェス ビューの背景色をカメラ サーフェス ビューに設定したいと考えています。

私はこれを同じものを実装するために使用しています。しかし、この例は完全ではありません。他の便利なリンクを教えてください。

ありがとう

4

6 に答える 6

28

これを行うための回避策があります。

  1. surfaceview の親ビューグループを追加し、surfaceview の代わりにこのビューグループに背景色を設定します。

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_dark">
    
        <com.example.surfacetest.MySurface
            android:id="@+id/surface"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </FrameLayout>
    
  2. SurfaceView インスタンスに以下を追加します。

    surfaceView.setZOrderOnTop(true);
    surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
    

これで、必要な背景色が得られ、表面ビューが半透明になります。

于 2015-01-15T08:46:52.207 に答える
2

次のように、SurfaceView でバックグラウンドを機能させるには、ちょっとしたハックアラウンドを行う必要があります。

setBackgroundおよびsetBackgroundDrawableメソッドをオーバーライドする

   Drawable background

   @Override
   public void setBackgroundDrawable(Drawable background) {
      this.background = background;
   }

   @Override
   public void setBackground(Drawable background) {
      this.background = background;
   }

setBoundsドローアブルを呼び出すことを忘れないでください

   @Override
   protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
      super.onLayout(changed, left, top, right, bottom);
      matrix = null;
      if (background != null)
         background.setBounds(left, top, right, bottom);
   }

次に、キャンバスをロック、描画、ロック解除、および投稿しているコードで、背景を追加します

   Canvas c = holder.lockCanvas();
   if (background != null)
      background.draw(c);

   // do your stuff here

   holder.unlockCanvasAndPost(c);

XML と Java の両方のバックグラウンドで機能します。

于 2014-10-20T13:06:59.467 に答える
1

これを使って

surfaceview.getHolder().setFormat(PixelFormat.TRANSLUCENT);
于 2013-03-07T17:57:40.433 に答える