1

私は写真アプリを開発しています。私の要件は、開発したコードのカメラプレビューへのオーバーレイ効果です。このコードでは、画像をサーフェスビューにオーバーレイします。

public class OverlayLiveCamera extends Activity {
       Camera camera;
       LayoutInflater controlInflater = null;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);

            Preview mPreview = new Preview(this);
            DrawOnTop mDraw = new DrawOnTop(this);
            setContentView(mPreview);
            addContentView(mDraw, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        }


       class Preview extends SurfaceView implements SurfaceHolder.Callback{

            SurfaceHolder mHolder;



            Preview(Context context) {
                super(context);
                // Install a SurfaceHolder.Callback so we get notified when the
                // underlying surface is created and destroyed.
                mHolder = 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.
                camera = Camera.open();
                try {
                    camera.setPreviewDisplay(holder);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            public void surfaceDestroyed(SurfaceHolder holder) {
                // Surface will be destroyed when we return, so stop the preview.
                // Because the CameraDevice object is not a shared resource, it's very
                // important to release it when the activity is paused.
                camera.stopPreview();
                camera = null;
            }

            public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
                // Now that the size is known, set up the camera parameters and begin
                // the preview.
                Camera.Parameters parameters = camera.getParameters();
                parameters.setPreviewSize(w, h);
                parameters=camera.getParameters();
                camera.setParameters(parameters);
                camera.startPreview();
            }
       }
        class DrawOnTop extends View {

            public DrawOnTop(Context context) {


                super(context);

                // TODO Auto-generated constructor stub
            }

            @Override
            protected void onDraw(Canvas canvas) {
                // TODO Auto-generated method stub
                Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.water);
                Paint paint = new Paint();
                paint.setAlpha(100);
                canvas.drawBitmap(mBitmap, 0, 0, paint); 


                super.onDraw(canvas);
            }

        }

私のxmlコード

<FrameLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
    <SurfaceView android:id="@+id/surfaceView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></SurfaceView>
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content">
        <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
        <Button android:text="Button" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    </LinearLayout>

</FrameLayout>

それはサーフェスビューとオーバーレイ画像になりますが、ボタンは表示されず、ボタンをクリックするとオーバーレイビューがキャプチャされ、SDカードに保存されます。

私を助けてください。

4

1 に答える 1

1

以下のコードを使用してボタンを追加できます。

 <FrameLayout android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="2"
  android:padding="5dip"  
  >
  <com.commonlib.controls.CameraPreview
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:layout_gravity="center"
  android:id="@+id/surface_camera"
  />
  <Button android:id="@+id/target"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="surfacebuttonview"
    >
    </Button>
</FrameLayout>
于 2012-11-30T11:53:43.077 に答える