Overlay-Bild auf cameraPreview
EINFÜHRUNG
Habe ich eine benutzerdefinierte Kamera-app, wo ich zeigen Kamera-Vorschau über eine benutzerdefinierte surfaceView. Was ich implementieren müssen, ist, erstellen Sie ein overlay-Bild aus einem Bild-Ressource angezeigt werden soll, über die cameraPreview, wie ein filter.
Ich bin schon auf der Suche über das in anderen Themen, aber ich habe nicht gefunden, etwas, anwendbar zu meiner app.
ANSATZ
Ich habe versucht, das Bild als bitamp, mit onDraw () - Methode und andere Möglichkeiten, aber die habe ich noch nicht erreicht, um zu zeigen, das Bild.
Dies ist mein code:
CODE
public class CameraActivity extends Activity implements PictureCallback {
private Button btnPhoto;
CameraPreview cameraPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cameraPreview = (CameraPreview) findViewById(R.id.camera_preview);
btnPhoto = (Button)findViewById(R.id.buttonTakePhoto);
btnPhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
takePhoto();
}
});
}
public void takePhoto() {
cameraPreview.getCamera().takePicture(null, null, this);
}
//...
}
_
public class CameraPreview extends FrameLayout implements SurfaceHolder.Callback {
private SurfaceView surfaceView;
private Camera camera;
public CameraPreview(Context context, AttributeSet attrs) {
super(context, attrs);
createCamera();
surfaceView = new SurfaceView(context);
addView(surfaceView);
SurfaceHolder holder = surfaceView.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.setKeepScreenOn(true);
}
private void createCamera() {
//...
try {
this.camera = Camera.open(activeCameraId);
} catch (Exception e) {
return;
}
//...
}
public Camera getCamera() {
return camera;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//...
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//...
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
//...
}
}
_
<com.uax.cameratakephoto.CameraPreview
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true" />
<Button //THIS IS THE BUTTON TO TAKE THE PHOTO
android:id="@+id/buttonTakePhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@android:drawable/ic_menu_camera" />
<ImageView //THIS IS A SMALL PREVIEW OF THE LAST PHOTO TAKEN
android:id="@+id/imageView"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
InformationsquelleAutor masmic | 2014-03-17
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas wie das hier tun
Erstellen Sie die kameravorschau-Klasse per extends SurfaceView
Dann in Ihrer Tätigkeit
Erklären Vorschau-Objekt und initialisiert Kamera-Objekt als auch
Danach
Dass seine.
was meinst du mit statische Aufrufe in xml ? was ich verstehe ist, mithilfe Ihrer benutzerdefinierten CameraPreview-Klasse in xml-habe ich Recht?.
Naja, schließlich bin ich ein anderes Leitbild, das zu tun. Ich verwende jetzt Google ' s Beispiel API CameraPreview. Ich werde acept Ihre Antwort um diesen Beitrag zu schließen, aber ich würde schätzen, wenn Sie konnten haben Sie einen Blick auf diese post: stackoverflow.com/questions/22458468/...
InformationsquelleAutor RizN81
Habe ich die gleiche Sache, aber mit einem TextView über eine Kamera-Vorschau. Der trick war dettaching es aus der XML-Layout und befestigen Sie es über die Kameras der Eltern.
Die Antwort ist überhaupt nicht intuitiv, aber ich fand, wie es zu tun.
Im Gegensatz zu Linearen Layouts, um der Erklärung NICHT definieren Sie die Z-Reihenfolge der Relativen Layouts.
Ich war in der Lage der überlagerung einer textview über die Kamera-Vorschau, indem er erklärte den beiden Ansichten
in XML-und, und überlagern Sie programmgesteuert auf meine Activity onCreate-Methode.
Angenommen, Sie haben eine XML mit einem TextView mit einem schönen transparenten hintergrund, die Sie überlagern möchten, über die Kamera-Vorschau-frame-layout, denn warum nicht?, es sieht cool aus!:
Wenn linke wie Sie, dass die Kamera deckt mit Ihrem text, egal was 🙁
Um es zu lösen, lets go programatical, und:
1) trennen Sie das TextView vom übergeordneten Layout
2) befestigen Sie die Kameras frame-layout nach befestigen Sie die Kamera zuerst aus.
Heres der code
OnCreate(){
...blaa blaaa...
Dies ist der Allgemeine Weg, es zu tun, Wenn Sie genauere Informationen benötigen, lassen Sie es mich wissen.
Muss ich Fristen einzuhalten bei der Arbeit, so dass ich die erste Lösung kommt mir in den Sinn, manchmal nicht, die meisten elegant oder effizient, wenn Sie wissen, einen besseren Weg, es zu tun, bitte teilen Sie es uns mit!
InformationsquelleAutor Josh