19

I wanted to set Linear Layout background dynamically in the following way:

  1. Fetch image from web url through XML parsing and then store that image into sd card.

  2. Now the image saved into sd card.

  3. Set that image as a linear layout background in the app.

Now I am stuck in the third step. Can anyone help?

1

7 Answers 7

51

Use this:

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

Also check this: How to convert a Bitmap to Drawable in android?

Sign up to request clarification or add additional context in comments.

11 Comments

am not saving my image into byte array.am saving it like InputStream is = conn.getInputStream(); Bitmap bmImg = BitmapFactory.decodeStream(is); FileOutputStream fos = new FileOutputStream(outputFile); bmImg.compress(CompressFormat.JPEG, 0, fos); fos.flush(); fos.close();
In this case use this: bmImg = BitmapFactory.decodeStream(is); BitmaBitmapDrawable background = new BitmapDrawable(bmImg); linearLayout.setBackgroundDrawable(background);
Are you sure the image is being downloaded and saved properly? Does it exist?
BitmapDrawable is deprecated.
new BitmapDrawable(bmImg) is deprecated. Use new BitmapDrawable(getContext().getResources(), bmImg) instead.
|
5

I have done this way:

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 load image in background:

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

Hope this will help you.

Comments

4

An easier way:

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

Comments

4

API are deprecated you can use the below code

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

Comments

0

Try to use this:

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

Comments

0

Use @Deimos's answer, but like this since some methods are deprecated now

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

Comments

-1

You can also set image from drawable folder.

yourView.setBackgroundResource(R.drawable.FILENAME);

That set FILENAME as background image.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.