2012-10-23 8 views
6

Ho un'attività, che ha un pulsante. Quando clicco sul pulsante mi reindirizza alla galleria di immagini. Voglio mostrare l'immagine selezionata nella prossima attività usando una vista immagine. Ma non sta visualizzando l'immagine. La vista è fuori dallo schermo quando l'immagine è impostata.Come caricare un'immagine nella vista immagine dalla galleria?

Il mio codice per la selezione dell'immagine e lo spostamento successivo sono indicati di seguito. Non sto usando nessuna storia vera nelle mie attività.

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

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK 
      && null != data) { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

     Cursor cursor = getContentResolver().query(selectedImage, 
       filePathColumn, null, null, null); 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     cursor.close(); 
     if (!(picturePath.equals(""))) { 
      Intent intent = new Intent(); 
      intent.setClass(MainActivity.this, ImageInGellary.class); 
      intent.putExtra("picturePath", picturePath); 
      startActivity(intent); 

     } 
    } 
} 

public class ImageInGellary extends Activity { 
    Button cancel; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.load_image); 
     cancel = (Button) findViewById(R.id.buttonCancelPicture); 
     Intent in = getIntent(); 
     savedInstanceState = in.getExtras(); 
     String picturePath = savedInstanceState.getString("picturePath"); 
     ImageView imageView = (ImageView) findViewById(R.id.img_view); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     cancel.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       /* 
       * Intent i = new Intent(Intent.ACTION_PICK, 
       * android.provider.MediaStore 
       * .Images.Media.EXTERNAL_CONTENT_URI); 
       * 
       * startActivityForResult(i, RESULT_LOAD_IMAGE); 
       */ 
       Intent intent = new Intent(); 
       intent.setClass(ImageInGellary.this, MainActivity.class); 
       startActivity(intent); 

      } 
     }); 
    } 

} 
+0

se non si è trovato allora posso inviare il mio codice. o può dare ulteriori spiegazioni. –

+0

Si prega di inviare il codice dalla classe 'ImageInGellary' e il file XML di layout di tale attività. – MarchingHome

+0

se rimuovo la cronologia precedente: no da manifest che sta mostrando. Ma quando rimuovo la cronologia di back no manifest gli altri requisiti. Per favore aiuto. –

risposta

17
public class ImageGalleryDemoActivity extends Activity { 


     private static int RESULT_LOAD_IMAGE = 1; 


     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture); 
      buttonLoadImage.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 

        Intent i = new Intent(
          Intent.ACTION_PICK, 
          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

        startActivityForResult(i, RESULT_LOAD_IMAGE); 
       } 
      }); 
     } 


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

      if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
       Uri selectedImage = data.getData(); 
       String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

       Cursor cursor = getContentResolver().query(selectedImage, 
         filePathColumn, null, null, null); 
       cursor.moveToFirst(); 

       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String picturePath = cursor.getString(columnIndex); 
       cursor.close(); 

       ImageView imageView = (ImageView) findViewById(R.id.imgView); 
       imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

      } 


     } 
    } 
1

Se non funziona, il seguente codice funziona:

import java.io.FileDescriptor; 
import java.io.IOException; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.ParcelFileDescriptor; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class ImageGalleryDemoActivity extends Activity { 


    private static int RESULT_LOAD_IMAGE = 1; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture); 
     buttonLoadImage.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       Intent i = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

       startActivityForResult(i, RESULT_LOAD_IMAGE); 
      } 
     }); 
    } 


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

     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      ImageView imageView = (ImageView) findViewById(R.id.imgView); 

      Bitmap bmp = null; 
      try { 
       bmp = getBitmapFromUri(selectedImage); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      imageView.setImageBitmap(bmp); 

     } 


    } 



    private Bitmap getBitmapFromUri(Uri uri) throws IOException { 
     ParcelFileDescriptor parcelFileDescriptor = 
       getContentResolver().openFileDescriptor(uri, "r"); 
     FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 
     Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); 
     parcelFileDescriptor.close(); 
     return image; 
    } 

} 
7

Se si vuole raggiungere in 1 riga, allora tutto quello che dovete fare è:

Picasso.with(MainActivity.this).load(data.getData()).noPlaceholder().centerCrop().fit().into((ImageView) findViewById(R.id.imageView1)); 

Soluzione completa: -

Scegli Immagine

public void pickImage() { 

    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE); 

} 

Load Image

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

      //Get ImageURi and load with help of picasso 
      //Uri selectedImageURI = data.getData(); 

      Picasso.with(MainActivity1.this).load(data.getData()).noPlaceholder().centerCrop().fit() 
        .into((ImageView) findViewById(R.id.imageView1)); 
     } 

    } 
} 

Nella tua situazione è necessario passare a ImageURI prossima attività

Uri selectedImageURI = data.getData(); 
+0

sì, funziona grazie. Ma fallisce quando seleziono dalla galleria – Punithapriya

+0

Picasso ti risparmia un mal di testa, ti consiglio di usare, tuttavia prova a imparare a caricare le immagini dal thread ui dalla documentazione per sviluppatori. –

4
public void onClick(View view) { 
    Intent gallery = new Intent(Intent.ACTION_GET_CONTENT); 
    gallery.setType("image/*"); 
    startActivityForResult(gallery, RESULT_LOAD_IMAGE); 
} 


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

    if(requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK){ 
     Uri imageUri = data.getData(); 
     imgView.setImageURI(imageUri); 

    } 
} 
+2

Puoi migliorare questa risposta [modificandolo] (http://stackoverflow.com/posts/39258831/edit) per spiegare come funziona. – dorukayhan

1

ho risolto il problema. Dopo aver selezionato l'immagine, converti l'immagine Uri in String e nella seconda classe, converti la stringa in immagine.

http://whats-online.info/science-and-tutorials/95/Android-get-image-from-gallery-into-imageview-programmatically/

http://whats-online.info/science-and-tutorials/49/Android-passing-multiple-data-from-one-activity-to-another/

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch(requestCode) { 
      case SELECT_PHOTO: 
       if(resultCode == RESULT_OK){ 
        Uri selectedImage = data.getData(); 
        if(selectedImage !=null){ 
         Intent intent=new Intent(MainActivity.this, Activity2.class); 
        Bundle extras = new Bundle(); 
        extras.putString("image", selectedImage.toString()); 
        intent.putExtras(extras); 
        startActivity(intent); 

        } 
       } 
     } 

Activity2.class

Bundle extras = getIntent().getExtras(); 
      String name = extras.getString("image"); 
     Uri imageFinal=Uri.parse(name); 
Problemi correlati