2017-05-05 3 views
0

Ich habe Probleme damit herauszufinden, wie ich die Bildansicht auf das Bild einstellen kann, das ich gerade mit der Kamera aufgenommen habe. Wäre ein Bonus, wenn es mehrere Möglichkeiten gäbe, mehrere Bilder gleichzeitig anzuzeigen. Immer wenn ich auf die Schaltfläche klicke, wird ein vorher aufgenommenes Bild angezeigt, dann öffnet sich die Kamera, was nicht richtig ist. Ich möchte, dass die Bildansicht leer ist, ich klicke auf die Schaltfläche, mache ein Bild, dann wird das Bild in der Bildansicht angezeigt. Ich glaube, dass diese Linie fehl am Platz ist, aber ich bin unsicher, wie/wohin ich sie bewegen soll. mimageView.setImageURI(outputFileUri);Android Studio: Wie man eine externe Datei (Foto von der Kamera) auf eine Bildansicht einstellt

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"); 

     } 
    } 
} 

Antwort

1

Ich glaube, dass diese Linie ist fehl am Platz, aber ich bin nicht sicher, wie/wo es zu bewegen.

startActivityForResult() ist asynchron. Ihr Foto wurde zu dem Zeitpunkt, zu dem die Methode zurückkehrt, nicht aufgenommen. Sie müssen das Bild in die ImageView in onActivityResult() laden, wenn Sie eine RESULT_OK Antwort erhalten.

Während setImageURI() funktioniert, war es nie eine besonders gute Idee, da es Ihre App für eine Weile einfrieren wird, während es das Foto lädt. Es gibt viele image loading libraries for Android, die Ihre ImageView asynchron handhaben werden.

+0

Vielen Dank! Entschuldigung, ich habe noch nie zuvor eine Bibliothek benutzt, da dies ein Gruppenprojekt ist, an dem wir alle zusammen mit GitHub arbeiten, wird jeder andere Benutzer die Bibliothek herunterladen müssen, die ich benutze? Oder durch die Implementierung in meinem Code wird es automatisch sein. –

+0

@FrankMascia: "Wird jeder andere die Bibliothek herunterladen müssen, die ich benutze? Oder durch die Implementierung in meinem Code wird es automatisch sein" - beides. Es ist fast garantiert, dass Sie bereits Bibliotheken verwenden. Suchen Sie in der 'build.gradle' Datei Ihres Moduls (z. B.' app/build.gradle') nach dem Wort 'dependencies'. Die darin enthaltenen 'compile'-Anweisungen stellen Bibliotheken dar, die Sie verwenden. Das Hinzufügen einer Bibliothek fügt in der Regel nur eine weitere Kompilierungsanweisung hinzu. – CommonsWare

+0

Super, danke nochmal. –

Verwandte Themen