2012-10-23 125 views
6

我有一个活动,它有一个按钮。当我点击按钮时,它会将我重定向到图片库。我想使用图像视图在下一个活动中显示选定的图像。但它不显示图像。图像设置后,视图不在屏幕上。如何从图库中加载图像视图中的图像?

下面给出了我选择图片和继续下一步的代码。我在我的活动中没有使用任何历史记录。

@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

如果你没有得到的话,我可以张贴我的代码。或者可以给出进一步的解释。 –

+0

请发布'ImageInGellary'类的代码和该活动的布局XML文件。 – MarchingHome

+0

如果我删除回来的历史记录:不是从清单,然后它显示。但是当我从清单删除回历史否影响其他要求。请帮忙。 –

回答

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

如果实在不行,下面的代码将工作:

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

如果你想实现它的1号线,那么所有你需要做的是:

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

完整解决方案: -

挑选图片

public void pickImage() { 

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

} 

加载图像

@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)); 
     } 

    } 
} 

在你的情况,你需要ImageURI传递到下一个活动

Uri selectedImageURI = data.getData(); 
+0

是它的工作thanks.But它失败时,我从画廊中选择 – Punithapriya

+0

毕加索为您节省头痛,我建议您使用,尽管如此尝试从开发者文档加载图像从UI线程。 –

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

你可以通过[编辑](http://stackoverflow.com/posts/39258831/edit)更好地解释它的工作原理。 – dorukayhan

1

我已经解决了你的问题。选取图像后,将图像Uri转换为字符串,然后在第二个类中将字符串转换为图像。

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); 
相关问题