2015-04-03 3 views
0

Я пытаюсь загрузить изображение и установить его в качестве фона, но мне не повезло.Загрузите изображение и установите его как фон Android

Таким образом, загрузка работает нормально, но когда я пытаюсь установить изображение в качестве фона, он не работает.

Вот код для загрузки изображения:

Intent intent = new Intent(Intent.ACTION_PICK, 
    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(intent, 0); 

затем загрузить:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK){ 
    Uri targetUri = data.getData(); 
    // textTargetUri.setText(targetUri.toString()); 
    try { 
    Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri)); 
    BitmapDrawable bit_background = new BitmapDrawable(getResources(), bitmap); 
    //prof_bg.setVisibility(View.VISIBLE); 
    prof_bg.setBackground(bit_background); //does not show. 

    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
} 

XML ImageView:

<ImageView 
android:id="@+id/bg_image" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:visibility="gone"/> 

На данный момент не отображаются ничего и не дать мне любые ошибки, поэтому я хочу спросить ..

  1. Итак, как мне получить, я помещал загружаемое изображение на фон, заполняющий весь экран телефона Android.

  2. Как сохранить изображение на этом фоне даже после прекращения активности. (Или вызовите изображение сразу, когда активность начинается без нажатия на кнопку, чтобы выбрать этот образ снова)

Изменено (до сих пор не работает)

Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri)); 
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 400, 400, false); 
BitmapDrawable bit_background = new BitmapDrawable(getResources(), scaledBitmap); 
prof_bg.setVisibility(View.VISIBLE); 
prof_bg.setBackground(bit_background); 

Спасибо за ваше чтение времени, помощник по-прежнему необходимо.

ответ

0

1) setBackground выходит из строя из-за большого размера изображения, попробуйте уменьшить его перед установкой:

Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 400, 400, false); //set the w x h as you want 
BitmapDrawable bit_background = new BitmapDrawable(getResources(), scaledBitmap); 
prof_bg.setVisibility(View.VISIBLE); 
prof_bg.setBackground(bit_background); 

2) Сохранить строку targetUri в SharedPreferences и получить его, чтобы установить, когда начинается деятельность.

+0

жаль, что это не сработало, оно заполнило весь экран, но не пошло на задний план. Я все еще могу нажать на кнопки, но изображение их покрыло. Я обновил ваш код. – nothingness

+0

Можете дать мне более подробную информацию о том, что не пошло на задний план? Я предположил, что вы пытаетесь установить фон ImageView. – itechevo

+0

Это не пошло на задний план. Он просто покрыл все. Но он растянулся, чтобы соответствовать экрану, но он не пошел на задний план. – nothingness

0

OnActivityResult(), вы должны убедиться, что путь к файлу верен. Вот что я делаю. Может быть, вы можете попробовать.

Uri targetUri = data.getData(); 
String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

Cursor cursor = mContext.getContentResolver().query(targetUri,filePathColumn, null, null, null); 
cursor.moveToFirst(); 
int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
String picturePath = cursor.getString(columnIndex); 
cursor.close(); 

После того, как вы получите picturePath, вы можете сохранить его в SharedPreference, так что вы можете проверить и восстановить его, если есть. Поэтому вам не нужно снова снимать картинку.

// to set the background image 
BitmapDrawable bb = new BitmapDrawable (null, BitmapFactory.decodeFile(picturePath)); 
(findViewById(R.id.bg_image)).setImageDrawable(bb); 
+0

для ввода в фоновое поле дает мне ошибку: 'Тип несоответствия: невозможно преобразовать из Bitmap в BitmapDrawable' в первую строку и' Метод setImageDrawable (BitmapDrawable) не определен для типа View' на втором. – nothingness

+0

Упс .. Извините. Измените это на BitmapDrawable bb = new BitmapDrawable (null, BitmapFactory.decodeFile (picturePath)); и просто fyi, вы должны добавить в файл манифеста использование разрешения READ_EXTERNAL_STORAGE. – 4tee

Смежные вопросы