2014-01-08 3 views
0

Я хочу установить изображение, которое находится на SD-карте в качестве фона для одного из моих файлов макета XML. Я думаю, что я должен использовать File inputStream и outputStream следующим образом:Как установить внешние изображения в качестве фона для макета приложения

public void setBackground() 
{ 
    try 
    { 
     String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/dir/FILENAME.PNG"; 
     InputStream ins = new FileInputStream(fileName); 

     byte[] buffer = new byte[ins.available()]; 
     ins.read(buffer); 
     ins.close(); 

     FileOutputStream fos = this.getResources().openRawResource(R.drawable.FILE_TO_BE_WRITTEN); 

     fos.write(buffer); 
     fos.close(); 
    } 
    catch (IOException io) {} 
} 

Однако я не уверен, что это сработает. Я хочу, чтобы некоторые советы по этому поводу использовали этот способ или могли бы получить лучший подход к этому. Благодарю.

ответ

1

Вам нужно ...

  1. Используйте BitmapFactory для извлечения Bitmap из файла.

    Bitmap bitmap = BitmapFactory.decodeFile(filePath);

  2. Преобразовать Bitmap к BitmapDrawable

    BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap);

  3. Установите на фоне ваших View с помощью setBackgroundDrawable(Drawable)

    myView.setBackground(bitmapDrawable);

+0

Спасибо большое @Yjay, Это было круто. это сработало. Но метод setBackgroundDrawable() устарел. Разве это не проблема для уровня API 16 или выше? –

+0

Мои извинения - это должно быть 'setBackground (...)'. Ответ обновлен. – Yjay

+0

Это был также мой вопрос. Я хочу разработать свой код для поддержки уровня API 10 и выше, но для этой функции требуется уровень API 16 и верхний. Как мне обойтись? –

0

это то, что вам нужно. Загрузка растрового изображения, уменьшив его, а затем положить его в ImageView или установить фон любого зрения Bitmap

+0

Я прочитал документацию специально в разделе «Обработка растровых изображений с потоком пользовательского интерфейса», но я не знаю, как его использовать. Нет ли простого способа назначить внешние изображения для пользовательских интерфейсов? –

+0

Это самый эффективный способ. Внешние изображения большие по размеру и размеру. поэтому вы должны масштабировать его, а затем использовать. Чтобы соответствовать представлению. Эта операция тяжелая, поэтому ее нужно было выполнить в другом потоке. Если нет, вы всегда будете получать исключение из предпосылки, я думаю. – Prachur

+0

Это было полезное руководство. Рано или поздно мне нужно пройти. Благодарю. –

0

Если с помощью внешнего изображения вы имеете в виду тот, который вы предоставляете, в Рез/вытяжке папку, то вы можете установить его в качестве фон в виде файла XML с использованием android:background="@drawable/file_name" права в <Layout> тэгом:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/bg"> 
+0

Да, это сработает, но я хочу получить внешнее изображение из SD-карты и программно установить фон. –

+0

@AliAllahyar ohh, хорошо. Тогда вы можете взглянуть на ответ Прачура. Это может быть то, что вы ищете. – TronicZomB

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