前提・実現したいこと
カメラで写真を撮り、surfaceviewにカメラpreviewを表示したい
発生している問題
エラーは発生していないのですが、実行してみると画面が真っ暗になっています。 画面を触るとカメラが起動されるのですが、 写真を撮っても画面に表示されず、真っ暗なままです。
該当のソースコード
MainActivity
1import android.content.ContentValues 2import android.content.Intent 3import android.content.pm.PackageManager 4import android.net.Uri 5import android.os.Bundle 6import android.provider.MediaStore 7import android.view.View 8import androidx.appcompat.app.AppCompatActivity 9import androidx.core.app.ActivityCompat 10import android.Manifest 11import android.view.SurfaceView 12 13class MainActivity : AppCompatActivity() { 14 private var _imageUri: Uri? = null 15 override fun onCreate(savedInstanceState: Bundle?) { 16 super.onCreate(savedInstanceState) 17 setContentView(R.layout.activity_main) 18 } 19 20 public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 21 super.onActivityResult(requestCode, resultCode, data) 22 if(requestCode == 200 && resultCode == RESULT_OK) { 23 24 fun SurfaceView.setImageURI(_imageUri: Uri?) { 25 } 26 27 val surfaceView = findViewById<SurfaceView>(R.id.surfaceView) 28 surfaceView.setImageURI(_imageUri) 29 } 30 } 31 32 fun onCameraImageClick(view: View) { 33 34 if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 35 36 val permissions = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE) 37 ActivityCompat.requestPermissions(this, permissions, 2000) 38 return 39 } 40 val fileName = "UseCameraActivityPhoto.jpg" 41 val values = ContentValues() 42 values.put(MediaStore.Images.Media.TITLE, fileName) 43 values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") 44 _imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) 45 val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) 46 intent.putExtra(MediaStore.EXTRA_OUTPUT, _imageUri) 47 startActivityForResult(intent, 200) 48 } 49 50 override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { 51 super.onRequestPermissionsResult(requestCode, permissions, grantResults) 52 53 if (requestCode == 2000 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 54 val ivCamera = findViewById<SurfaceView>(R.id.surfaceView) 55 onCameraImageClick(ivCamera) 56 } 57 } 58}
xml
1<?xml version="1.0" encoding="utf-8"?> 2 3<FrameLayout 4 xmlns:android="http://schemas.android.com/apk/res/android" 5 xmlns:app="http://schemas.android.com/apk/res-auto" 6 android:layout_height="match_parent" 7 android:layout_width="match_parent"> 8 9 <SurfaceView 10 android:id="@+id/surfaceView" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent" 13 android:layout_gravity="center" 14 android:onClick="onCameraImageClick" 15 android:scaleType="center" 16 app:srcCompat="@android:drawable/ic_menu_camera" /> 17 18</FrameLayout>
Manifest
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="jp.co.stv_tech.test243"> 4 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 5 6 <application 7 android:allowBackup="true" 8 android:icon="@mipmap/ic_launcher" 9 android:label="@string/app_name" 10 android:roundIcon="@mipmap/ic_launcher_round" 11 android:supportsRtl="true" 12 android:theme="@style/AppTheme"> 13 <activity android:name=".MainActivity"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN" /> 16 17 <category android:name="android.intent.category.LAUNCHER" /> 18 </intent-filter> 19 </activity> 20 </application> 21 22</manifest>
試したこと
imageviewの代わりにsurfaceviewを使用してみたのですが、
画面が真っ暗になったという結果が得られました。
調べるとsurfaceviewを使う際はSurfaceHolderやCallbackを使用する旨が多くの記事に記載されておりました。
surfaceviewを学ぶためにまず撮った写真をただ表示したいのですが、
ただ表示させるだけでもSurfaceHolderやCallbackを使用いないと画像の表示はされないのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。