2017-05-05 2 views
0

カメラで撮影したばかりの画像に画像ビューを設定する方法がわかりません。一度に複数のキャプチャした画像を表示する方法があれば、ボーナスになるでしょう。ボタンをクリックすると、キャプチャされた前の画像が表示され、カメラが開きますが、これは正しくありません。 Imageviewのように空白にすると、ボタンをクリックして写真を撮ると、その画像が画像ビューに表示されます。私はこのラインが外れていると信じていますが、どうやってどこへ移動するのかは分かりません。 mimageView.setImageURI(outputFileUri);Androidスタジオ:外部ファイル(カメラからの写真)を画像ビューに設定する方法

public class cameraclass extends Activity { 
    int TAKE_PHOTO_CODE = 0; 
    public static int count = 0; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.camera); 
     final ImageView mimageView; 
     mimageView = (ImageView) this.findViewById(R.id.image_from_camera); 




     // Here, we are making a folder named picFolder to store 
     // pics taken by the camera using this application. 
     final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/"; 
     File newdir = new File(dir); 
     newdir.mkdirs(); 

     Button capture = (Button) findViewById(R.id.take_image_from_camera); 
     capture.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       // Here, the counter will be incremented each time, and the 
       // picture taken by camera will be stored as 1.jpg,2.jpg 
       // and likewise. 
       count++; 
       String file = dir+count+".jpg"; 
       File newfile = new File(file); 
       try { 
        newfile.createNewFile(); 
       } 
       catch (IOException e) 
       { 
       } 

       //Uri outputFileUri = Uri.fromFile(newfile); 
       Uri outputFileUri = FileProvider.getUriForFile(getApplicationContext() , "com.example.android.com220finalapp.provider", newfile); 

       Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

       startActivityForResult(cameraIntent, TAKE_PHOTO_CODE); 
       mimageView.setImageURI(outputFileUri); 

      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { 
      Log.d("CameraDemo", "Pic saved"); 

     } 
    } 
} 

答えて

1

私はこのラインが場違いであることを信じて、しかし、私はそれをどこに移動する方法/へとわかりませんよ。

startActivityForResult()は非同期です。方法が戻るまでに写真が撮られません。 RESULT_OKという応答がある場合は、画像をImageViewonActivityResult()に読み込む必要があります。

しかし、setImageURI()が機能するかもしれませんが、それは写真を読み込むときにしばらくあなたのアプリケーションをフリーズさせるので特に良いアイデアはありませんでした。 ImageViewの非同期読み込みを処理する多くのimage loading libraries for Androidがあります。

+0

ありがとうございました!申し訳ありませんが、これまでに図書館を使ったことはありません。これはグループプロジェクトであり、私たちはgithubと一緒に取り組んでいます。または、それを私のコードに実装することによって、自動的に行われます。 –

+0

@FrankMascia: "私が使っているライブラリをダウンロードする必要は他にもありますか?それとも、自分のコードに実装すれば自動的になりますか?"すでにライブラリを使用していることがほぼ保証されています。モジュールの 'build.gradle'ファイル(例えば、' app/build.gradle')に 'dependencies'という単語がないか調べてください。そこの 'compile'ステートメントは、使用しているライブラリを表しています。ライブラリを追加すると、通常は別の 'compile'文が追加されます。 – CommonsWare

+0

よろしくお願いします。 –

関連する問題