从画廊android中选择照片

时间:2015-07-09 14:40:11

标签: android imageview image-gallery

我正在尝试构建一个包含ImageView的应用。如果我点击它,图库就会出现,这样我就可以为imageView选择一张图片了。 我的Xml非常简单:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:id="@+id/imageView"
    android:layout_gravity="center_horizontal"
    android:clickable="true"/>
<LinearLayout>

这是我的主要课程

public class MainActivity extends Activity {
ImageView img;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    img=(ImageView)findViewById(R.id.imageView);
    setContentView(R.layout.cam);
    img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent =new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent,"Select Contact Image"),1);
        }
    });

 }
 public void onActivityResult(int reqCode,int resCode, Intent data){
    if(resCode==RESULT_OK){
        if(reqCode==1){
            img.setImageURI(data.getData());
        }
    }
  }
}

2 个答案:

答案 0 :(得分:3)

你是正确的,只需改变一些事情。

这将打开您的画廊:

image.setOnClickListener(new View.OnClickListener() {
        @Override
        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);
        }
    });

下一步实现onActivityResult回调。它也很简单:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RESULT_LOAD_IMAGE && resultCode == Activity.RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();
        image.setImageBitmap(BitmapFactory.decodeFile(picturePath));
    }
}

希望这会对你有所帮助:)。

答案 1 :(得分:0)

您可以使用Magical Take Photo库。 你有选择图片的可能性或用这个图库拍照,广告调整大小的可能性和改变照片的质量:D

<强> 1。尝试使用gradle编译

 compile 'com.frosquivel:magicaltakephoto:1.0'

<强> 2。您需要在manifest.xml中使用此权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA"/>

第3。像这样的类

//“this”是当前的活动参数

MagicalTakePhoto magicalTakePhoto =  new MagicalTakePhoto(this,ANY_INTEGER_0_TO_4000_FOR_QUALITY);

<强> 4。如果你需要拍照,请使用方法

magicalTakePhoto.takePhoto("my_photo_name");

<强> 5。如果您需要在设备中选择图片,请尝试使用以下方法:

 magicalTakePhoto.selectedPicture("my_header_name");

<强> 6。您需要覆盖活动或片段的onActivityResult方法,如下所示:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        magicalTakePhoto.resultPhoto(requestCode, resultCode, data);
        //example to get photo
        //imageView.setImageBitmap(magicalTakePhoto.getMyPhoto());
    }

注意:只有使用此库,您才可以在设备中选择图片,这将使用最小的API 15。