如何在相机上同时捕捉我的cameraview和我的自定义视图

时间:2013-07-11 04:08:28

标签: android android-camera android-custom-view

我正在制作一个应用程序,我正在打开相机,在相机上方,我正在从自定义视图画布对象中绘制花卉图片。现在我想拍照,我应该怎么做用那朵花拍相机的照片。

1 个答案:

答案 0 :(得分:0)

我已将此布局用于

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent" 
android:id="@+id/layoutCam">

<FrameLayout 
    android:id="@+id/preview"
    android:layout_weight="1" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</FrameLayout>

<ImageView 
    android:id="@+id/imgHole" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
    android:layout_gravity="center"/>

<Button 
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom"
    android:text="Take Snap" 
    android:id="@+id/btnTakeSnap"/>
</FrameLayout>

和java代码是

 public void onClick(View v)
        {
            preview.camera.takePicture(shutterCallback, rawCallback,  postViewCallback, jpegCallback);
            chal();
        }

private boolean chal()
        {
            buttonTakeSnap.setVisibility(View.INVISIBLE);
            View v1 = camView.getChildAt(1);
            v1.setDrawingCacheEnabled(true);
            v1.buildDrawingCache();
            bmp = v1.getDrawingCache();
            v1.setDrawingCacheEnabled(true);
            buttonTakeSnap.setVisibility(View.VISIBLE);
            Toast.makeText(this, "Akhtitaam", Toast.LENGTH_SHORT).show();
            return true;
        }

使用此代码我从chal()得到两个位图;方法和第二个来自jpegCallBack();现在,您可以将这些位图放在同一布局上以重叠并捕获该视图

使用此代码

使用此方法捕获视图

public static Bitmap loadBitmapFromView(View v)
{
  Paint drawPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
  drawPaint.setAntiAlias(false);
  drawPaint.setFilterBitmap(false);
  Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
  Canvas c = new Canvas(b);
  c.drawBitmap(b, 0, 0, drawPaint);
  v.draw(c);
  return b;
}

将相机的表面视图作为此参数传递

View view=(YourParentLayout) findViewById(R.id.YourParentLayout);
loadBitmapFromView(view);