2013-02-15 7 views
6

Wie füge ich eine rechteckige Überlagerung (die mehr wie ein rechteckiger Rahmen sein sollte) in der Kameravorschau hinzu? Meine Anwendung besteht aus einer Schaltfläche, die beim Anklicken die Kamera öffnet. Ich brauche das Overlay in dieser Kameravorschau.Wie füge ich ein rechteckiges Overlay in eine Kameraanwendung ein?

Der Code für die Java-Datei ist:

public class MainActivity extends Activity { 
    Button b; 
    Intent i; 
    Bitmap bmp; 
    final static int cameraData = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     b = (Button) findViewById(R.id.button); 
     InputStream is = getResources().openRawResource(R.drawable.ic_launcher); 
     bmp = BitmapFactory.decodeStream(is); 
     b.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
      // TODO Auto-generated method stub 
      i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(i, cameraData); 

     } 
    }); 
} 
} 

Die Layout-Datei lautet wie folgt:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_gravity="center" 
    android:text="click to take photo" /> 

<Button 
    android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="click" 
    android:layout_gravity="center" /> 

</LinearLayout> 

Antwort

4

Sie haben eine eigene Vorschau erstellen, indem Sie die Surface-Klasse erweitern.

Siehe den folgenden Link, der Ihnen hilft.

Custom camera android

Nehmen FrameLayout mit Surface wie nach Ihren Bedürfnissen

+0

Wie zeichne ich das Rechteck? –

+0

können Sie ein Bild nehmen und es auf die Oberflächenansicht setzen – koti

+0

ok .. Also schlagen Sie vor, dass ich das Bild eines Rechtecks? Wird es transparent sein? –

13

Erstellen Sie zunächst eine öffentliche Klasse, die Ansicht erweitert child.and anpassen. Zeichnen Sie in der onDraw() -Methode Ihr Rechteck. Zum Beispiel:

public class Box extends View { 
    private Paint paint = new Paint(); 
    Box(Context context) { 
    super(context); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { // Override the onDraw() Method 
    super.onDraw(canvas); 

    paint.setStyle(Paint.Style.STROKE); 
    paint.setColor(Color.GREEN); 
    paint.setStrokeWidth(10); 

    //center 
    int x0 = canvas.getWidth()/2; 
    int y0 = canvas.getHeight()/2; 
    int dx = canvas.getHeight()/3; 
    int dy = canvas.getHeight()/3; 
    //draw guide box 
    canvas.drawRect(x0-dx, y0-dy, x0+dx, y0+dy, paint); 
    } 
} 

Dann in Ihrer Kamera Vorschau Aktivität haben eine Instanz Ihrer Klasse Box

Box box = new Box(this); 

Dann

addContentView(box, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

Ein grünes Rechteck wird auf der Kamera gezogen werden Vorschau. Viel Glück! Hier ist ein Link, der mir geholfen hat Draw on camera preview

+0

Du bist nur Genie! Vielen Dank und Gott segne !!! – Vincy

+0

Dies sollte die richtige Antwort sein – graell