Wie kann ich die Größe der Kameravorschau in einem quadratischen SurfaceView (wie Instagram) auf ein quadratisches Seitenverhältnis einstellen?
Ich versuche, mich zu entwickeln, meine eigene Aktivität der Kamera, aber ich habe ein problem, dass ich nicht bin nicht in der Lage zu lösen...
Was ich will, ist etwas, das sehr ähnlich zu dem instagram-Foto-Rahmen, und dies ist, was ich bekomme:
Wenn ich sollte so etwas wie dieses:
...
Wann sollte ich etwas wie:
Ich glaube, ich bin maanaging die SurfaceView und Kamera-Vorschau gut, nur mit
Camera.Parameters parameters = camera.getParameters();
camera.setDisplayOrientation(90);
und Benutzerdefinierte SurfaceView:
public class SquaredSurfaceView extends SurfaceView {
private int width;
private int height;
public SquaredSurfaceView(Context context) {
super(context);
}
public SquaredSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquaredSurfaceView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = MeasureSpec.getSize(widthMeasureSpec);
height = width;
setMeasuredDimension(width, width);
}
public int getViewWidth() {
return width;
}
public int getViewHeight() {
return height;
}
}
Was ich falsch mache?? 🙁
InformationsquelleAutor der Frage cesards | 2012-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie gesagt, Sie müssen finden Sie die richtige Größe der Vorschau (die mit Seitenverhältnis 1:1) und wahrscheinlich müssen Sie FrameLayout für die SurfacePreview. Es scheint, dass Sie haben und das Seitenverhältnis-problem vielleicht haben Sie die richtige Größe der Vorschau aber Sie platzieren es in einem falschen layout.
Eine andere Lösung könnte sein (nur wie Instagram funktioniert), um Ihre Kamera in voller Größe und dann verstecken Sie einige Bereiche der layour nur um es wie ein Quadrat Aussehen. Dann durch die software, die Sie würde haben schneiden Sie das Bild, um es zu einem echten Platz.
Hoffe, dies hilft Ihnen
InformationsquelleAutor der Antwort xramos
Die Lösung, die für mich funktioniert ist die 2. Antwort, aber da müssen wir drehen die Kamera um 90 ° notwendig ist, schalten Sie die BREITE mit der HÖHE, so etwas wie dieses...
Hoffe, diese Lösung hilft!! 😀
InformationsquelleAutor der Antwort Ycastan
meine Lösung ist mehr wie eine quadratische Maske und dann legen Sie es über die Vorschau-Oberfläche.
Benötigen Sie 3 Dinge, vor allem, zuerst einen quadratischen Rahmen-Komponente. Ich habe eine benutzerdefinierte Komponente:
Abhängig von der Android-API-version für die, die Sie entwickeln, werden Sie vielleicht hinzufügen müssen, um einen anderen Konstruktor überladen. Für Kitkat das ist gut so.
Zweiten Schritt erstellen Sie das layout:
Beachten Sie, dass die RelativeLayout "camera_preview" wird verwendet, um das Rendern der Vorschau, es ist zentriert und hat eine LinearLayout enthält die quadratische Komponente. Dies ist eigentlich die "Maske", und es deckt die Kamera-Vorschau.
Beachten Sie auch, dass mit Ausnahme der SquaredFrame, die transparent ist, die anderen beiden sind im hintergrund eingefärbt mit schwarz.
Nun die Oberfläche-Ansicht für die Kamera-Vorschau, in der die Oberfläche wird die Größe entsprechend dem Seitenverhältnis.
Jetzt muss alles verbunden werden die activity-Klasse
Wenig lang, aber ich hoffe, dass es hilfreich sein, für mehr als eine. 🙂
InformationsquelleAutor der Antwort YadirHB
Ich hatte das gleiche problem mit einer quadratischen anzeigen - entschlossen es einfach, durch die Einstellung der SurfaceView die Kamera die Größe, um die Größe der Ansicht, wo ich wollte, um es zu zeichnen. Keine komplizierten Kalkulationen, und es funktioniert für mich. Siehe meine Antwort hier für die ganze Methode: https://stackoverflow.com/a/39430615/5181489
InformationsquelleAutor der Antwort Martin Šuráb
Diese können Sie verwenden, um pictureSize:
InformationsquelleAutor der Antwort shailesh
Es ist so schwer. Nicht leicht.
Erste Sache : Sie definieren 2 schwarz
Linear Layout
man die UI als du gepostet hast.Zweite Sache : Sie müssen schneiden Sie das Bild aus dem vollständigen Bild, quadratisches Bild.
Wie zu schneiden, die Sie brauchen verwenden Sie
scaleBitmap
Methode.Oder Sie wollen echte Benutzerdefinierte Kamera? Der check-in hier
InformationsquelleAutor der Antwort Huy Tower