it-roy-ru.com

Установить линейный макет фона динамически

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

  1. Извлеките изображение из веб-адреса с помощью синтаксического анализа XML, а затем сохраните это изображение на SD-карте.

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

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

Теперь я застрял на третьем этапе. Кто-нибудь может помочь?

16
Kanika

Использовать этот:

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

Также проверьте это: Как конвертировать растровое изображение в Drawable в Android?

46
Deimos

Я сделал так:

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 to загрузить изображение в фон :

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);
    }
}

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

4
Hiren Patel

Более простой способ:

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

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

BitmapDrawable background = new BitmapDrawable(getResources(), bitmapImage);
linearLayout.setBackground(background);
3
Inder Kumar Rathore

Используйте ответ @ Deimos, но вот так, потому что некоторые методы устарели

Bitmap bmImg = BitmapFactory.decodeStream(is);
BitmapDrawable background = new BitmapDrawable(context.getResources(), bmImg);
linearLayout.setBackground(background);
0
McMillanMe

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

Bitmap bmpOriginal = BitmapFactory.decodeResource(getResources(), R.drawable.img);
BitmapDrawable bmpBackground = new BitmapDrawable(getResources(), bmpOriginal)
0
Matheus Evangelista