2016-06-16 4 views
1

私のSDカードにはいくつかのフレームがあります。Androidでカメラプレビューをフレームする方法は?

私の活動にはフレームのリストがあります。

ユーザーがフレームをクリックすると、そのフレームにカメラプレビューが表示されます。

画像をご覧ください。

enter image description here

どのように私は、この機能をアーカイブすることができますか?

これについて検索しましたが、適切な例はありませんでした。

+1

プレビューにframelayoutを使用して画像を設定することができます – raj

答えて

3

SurfaceViewクラスを拡張して独自のプレビューを作成する必要があります。

以下のリンクを参考にしてください。

Custom camera android

あなたはSurfaceViewを使用してカメラを開き、あなたがそれに応じxmlでその大きさを調整することができCustomViewを作成することができ

ニーズごとにカスタマイズchild.andとしてSurfaceViewとでframeLayoutください。

今、あなたはあなたのXMLに

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    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/mySurfaceView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <com.mjl.CustomPreview 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    </com.mjl.CustomPreview> 

    </FrameLayout> 

    <LinearLayout 
    android:layout_below="@id/mySurfaceView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:gravity="center"> 

    <ImageView android:id="@+id/myImageView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/icon"/> 
    </LinearLayout> 

</RelativeLayout> 
をこのカスタムビューを追加することができ

内部extends SurfaceViewとオープンカメラCustomPreview.java

public class CustomPreview extends SurfaceView implements SurfaceHolder.Callback{ 

    public static Bitmap mBitmap; 
    SurfaceHolder holder; 
    static Camera mCamera; 

    public CustomPreview(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     holder = getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { 

     Camera.Parameters parameters = mCamera.getParameters(); 
     parameters.getSupportedPreviewSizes(); 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 
    } 
    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 

     try { 
      mCamera = Camera.open(); 
      mCamera.setPreviewDisplay(holder); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     mCamera.stopPreview(); 
     mCamera.release(); 
    } 
    /*** 
    * 
    * Take a picture and and convert it from bytes[] to Bitmap. 
    * 
    */ 
    public static void takeAPicture(){ 

     Camera.PictureCallback mPictureCallback = new PictureCallback() { 
      @Override 
      public void onPictureTaken(byte[] data, Camera camera) { 

       BitmapFactory.Options options = new BitmapFactory.Options(); 
       mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options); 
      } 
     }; 
     mCamera.takePicture(null, null, mPictureCallback); 
    } 
} 

というクラスを作成します。

今すぐ出力をお楽しみください。

+0

リプレイに感謝します。私はこのソリューションを統合し、戻ってきます。 –

関連する問題