Saya menggunakan Pratinjau untuk menampilkan apa yang dilihat kamera di layar.
Saya bisa mendapatkan semuanya bekerja dengan baik, permukaan dibuat, permukaan diatur dan permukaan ditampilkan.
Namun itu selalu menampilkan gambar pada sudut 90 derajat yang salah dalam mode potret.
Seperti pada gambar:
Saya sadar bahwa menggunakan kode berikut akan mengatur gambar secara lurus:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Namun saya memiliki Pratinjau dalam Aktivitas yang memiliki elemen lain di dalamnya dan tidak masuk akal jika Aktivitas saya ditampilkan dalam mode lanskap. (Ini dinonaktifkan secara default)
Jadi saya bertanya-tanya apakah ada cara untuk mengubah orientasi Pratinjau? Dan membiarkan sisa Aktivitas saya ditampilkan dengan benar dalam mode Potret?
Atau tetap memutar pratinjau agar ditampilkan dengan benar?
Jawaban:
Masalah ini tampaknya dimulai sebagai bug dengan perangkat keras tertentu, lihat di sini, tetapi dapat diatasi dengan menggunakan panggilan ke mCamera.setDisplayOrientation (derajat) yang tersedia di API 8. Jadi begini cara saya mengimplementasikannya:
Ini ada di HTC Desire dan saya awalnya harus memasukkan pernyataan pencatatan di setiap pemeriksaan rotasi untuk mengatakan apa rotasi itu dan kemudian men-debug pada perangkat dan melihat keluaran logCat saat saya memutar perangkat. Untuk HTC Desire, 0 adalah telepon seperti yang Anda harapkan (potret), 90 derajat memutar telepon 90 derajat COUNTER-CLOCKWISE (Saya berasumsi itu searah jarum jam). Dalam kode yang akan Anda lihat, saya tidak perlu melakukan rotasi tampilan saat ponsel berada pada 90 atau 180 derajat - perangkat sepertinya menangani ini sendiri. Hanya satu titik yang tidak berfungsi dengan benar: Rotasi 270 derajat adalah saat Anda memutar perangkat 90 derajat searah jarum jam dan tampilan rotasi berlawanan dengan itu, tetapi jika Anda memutar perangkat 270 derajat berlawanan arah jarum jam, tampaknya tidak mengimbangi dengan benar.
PS Perhatikan pertukaran lebar dan tinggi dalam rotasi yang sesuai.
sumber
mCamera.setParameters(parameters);
pernyataan kecelakaan app saya, karena dimensi permukaan tidak ukuran pratinjau berlaku untuk telepon saya (mungkin karena saya menjaga status bar terlihat?). Namun, saya menemukan bahwa menggunakanmCamera.setDisplayOrientation(90)
thenmCamera.setPreviewDisplay(mSurfaceHolder);
tanpa mengatur parameter juga berfungsi!coba atur orientasi tampilan. Ini memecahkan masalah saya.
sumber
onPreviewFrame()
atauonPictureTaken()
coba kode ini
sumber
Saya mengalami masalah dengan Kamera depan (Masalah terbalik). Kemudian saya menggunakan metode berikut yang didokumentasikan di Android Docs -
sumber
Saya melakukannya dengan mengambil saran dari mCamera.setDisplayOrientation (90); tetapi juga memutar bitmap karena untuk beberapa alasan pendekatan yang lain tidak berfungsi untuk saya di versi 2.3.3.
Untuk memutar bitmap saya melakukan ini:
sumber
Saya telah membandingkan kode saya dengan tutorial dan yang akhirnya memperbaikinya adalah menempatkan kode berikut ke AndroidManifext.xml saya: Di
<activity>
tag:sumber
sumber
Saya pikir nilai SENSOR_ORIENTATION akan menjelaskan nilai apa yang akan digunakan untuk rotasi daripada hardcode hingga 90 derajat
sumber