Загрузка изображения из галереи 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Загрузка изображения из галереи



Предположим, у вас есть на экране компонент ImageView, и вы хотите загрузить в него какое-нибудь изображение из галереи по нажатию кнопки:

 

Button myButton;

ImageView myImageView;

static final int GALLERY_REQUEST = 1;

 

myButton = (Button)findViewById(R.id.button1);

myImageView = (ImageView)findViewById(R.id.imageView1);

 

myButton.setOnClickListener(new OnClickListener() {

 

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

 

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);

photoPickerIntent.setType("image/*");

startActivityForResult(photoPickerIntent, GALLERY_REQUEST);

}

});

 

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {

super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

 

Bitmap galleryPic = null;

 

switch(requestCode) {

case GALLERY_REQUEST:

if(resultCode == RESULT_OK){

Uri selectedImage = imageReturnedIntent.getData();

try {

galleryPic = Media.getBitmap(getContentResolver(), selectedImage);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

myImageView.setImageBitmap(galleryPic);

}

}

}

Намерение ACTION_PICK вызывает отображение галереи всех изображений, хранящихся на телефоне, позволяя выбрать одно изображение. При этом возвращается адрес URI, определяющий местоположение выбранного изображения. Для его получения используется метод getData(). Далее для преобразования URI-адреса в соответствующий экземпляр класса Bitmap используется специальный метод Media.getBitmap(). И у нас появляется возможность установить изображение в ImageView при помощи setImageBitmap().

На самом деле можно поступить еще проще и использовать метод setImageURI.

 

Uri selectedImage = imageReturnedIntent.getData();

myImageView.setImageURI(selectedImage);

Сравните с предыдущим примером - чувствуете разницу? Тем не менее, приходится часто наблюдать подобный избыточный код во многих проектах. Это связано с тем, что метод порой кэширует адрес и не происходит изменений. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri.

Получить размеры ImageView - будьте осторожны

У элемента ImageView есть два метода getWidth() и getHeight(), позволяющие получить его ширину и высоту. Но если вы попробуете вызвать указанные методы сразу в методе onCreate(), то они возвратят нулевые значения. Можно добавить кнопку и вызвать данные методы через нажатие, тогда будут получены правильные результаты. Либо использовать другой метод активности, который наступает позже.

 

ImageView image;

TextView info1;

Button butGetSizeImageV;

 

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

 

image = (ImageView)findViewById(R.id.imageView1);

info1 = (TextView)findViewById(R.id.textView1);

butGetSizeImageV = (Button)findViewById(R.id.button1);

 

// пробуем получить размеры ImageView сразу при загрузке. Вернёт нулевые значения

info1.setText("Размеры ImageView: " + String.valueOf(image.getWidth())

+ ": " + String.valueOf(image.getHeight()));

 

butGetSizeImageV.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

// этот же код вызывается при нажатии кнопки. Теперь всё правильно

info1.setText("Размеры ImageView: " + String.valueOf(image.getWidth())

+ ": " + String.valueOf(image.getHeight()));

}

});

}



Поделиться:


Последнее изменение этой страницы: 2017-01-27; просмотров: 488; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.125.171 (0.007 с.)