2011-10-04 5 views
16

Я хотел установить Linear Layout фон динамически следующим образом:набор линейного фона макета динамически

  1. Fetch изображение из URL-адреса веб через XML разбор, а затем сохранить это изображение в SD-карту.

  2. Теперь изображение сохранено в SD-карте.

  3. Установите это изображение как линейный макет фона в приложении.

Теперь я застрял на третьем шаге. Может ли кто-нибудь помочь?

+0

http://developerlife.com/tutorials/?p=312 –

ответ

44

Используйте это:

Bitmap bmImg = BitmapFactory.decodeStream(is); 
BitmapDrawable background = new BitmapDrawable(bmImg); 
linearLayout.setBackgroundDrawable(background); 

Также проверьте следующее: How to convert a Bitmap to Drawable in android?

+0

Я не сохраняю свой образ в байте array.am, сохраняя его как InputStream is = conn.getInputStream(); Bitmap bmImg = BitmapFactory.decodeStream (is); FileOutputStream fos = new FileOutputStream (outputFile); bmImg.compress (CompressFormat.JPEG, 0, fos); fos.flush(); fos.close(); – Kanika

+0

В этом случае используйте это: 'bmImg = BitmapFactory.decodeStream (is); ' ' BitmaBitmapDrawable background = new BitmapDrawable (bmImg); ' ' linearLayout.setBackgroundDrawable (background); ' – Deimos

+0

no его не работает, он все еще показывает мне исключение нулевого указателя – Kanika

2

Простой способ:

BitmapDrawable d = new BitmapDrawable("/sdcard/data/image.jpg"); 
linearLayout.setBackgroundDrawable(d); 
+0

Исключение Null pointer с указанным выше кодом – Kanika

-2

Вы также можете установить изображение из растяжимой папки.

yourView.setBackgroundResource(R.drawable.FILENAME); 

Этот набор FILENAME как фоновое изображение.

4

Я сделал это так:

private RelativeLayout relativeLayout; 

OnCreate:

relativeLayout= (RelativeLayout)findViewById(R.id.relativeLayout); 

new LoadBackground("http://www.tmonews.com/wp-content/uploads/2012/10/androidfigure.jpg", 
      "androidfigure").execute(); 

AsyncTask к нагрузки изображения в фон:

private class LoadBackground extends AsyncTask<String, Void, Drawable> { 

    private String imageUrl , imageName; 

    public LoadBackground(String url, String file_name) { 
     this.imageUrl = url; 
     this.imageName = file_name; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Drawable doInBackground(String... urls) { 

     try { 
      InputStream is = (InputStream) this.fetch(this.imageUrl); 
      Drawable d = Drawable.createFromStream(is, this.imageName); 
      return d; 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
      return null; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 
    private Object fetch(String address) throws MalformedURLException,IOException { 
     URL url = new URL(address); 
     Object content = url.getContent(); 
     return content; 
    } 

    @Override 
    protected void onPostExecute(Drawable result) { 
     super.onPostExecute(result); 
     relativeLayout.setBackgroundDrawable(result); 
    } 
} 

Надеюсь, это поможет вам.

3

API осуждается вы можете использовать следующий код

BitmapDrawable background = new BitmapDrawable(getResources(), bitmapImage); 
linearLayout.setBackground(background); 
0

Попробуйте использовать это:

Bitmap bmpOriginal = BitmapFactory.decodeResource(getResources(), R.drawable.img); 
BitmapDrawable bmpBackground = new BitmapDrawable(getResources(), bmpOriginal) 
0
ответ

использовать @ Деймос, но как это, так как некоторые методы являются устаревшими в настоящее время

Bitmap bmImg = BitmapFactory.decodeStream(is); 
BitmapDrawable background = new BitmapDrawable(context.getResources(), bmImg); 
linearLayout.setBackground(background); 
Смежные вопросы