Динамически установить фоновый макет
Я хотел бы установить динамический фон Linear Layout следующим образом:
-
Извлечь изображение из веб-url через синтаксический анализ XML, а затем сохранить это изображение на SD-карте.
-
Теперь изображение сохраняется в SD-карте.
-
Установите это изображение в качестве фона линейного макета в приложении.
Теперь я застрял на третьем шаге. Может ли кто-нибудь помочь?
Ответы
Ответ 1
Используйте это:
Bitmap bmImg = BitmapFactory.decodeStream(is);
BitmapDrawable background = new BitmapDrawable(bmImg);
linearLayout.setBackgroundDrawable(background);
Также проверьте это: Как преобразовать растровое изображение в Drawable в android?
Ответ 2
Я сделал так:
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
Более простой способ:
BitmapDrawable d = new BitmapDrawable("/sdcard/data/image.jpg");
linearLayout.setBackgroundDrawable(d);
Ответ 4
API устарели, вы можете использовать приведенный ниже код
BitmapDrawable background = new BitmapDrawable(getResources(), bitmapImage);
linearLayout.setBackground(background);
Ответ 5
Попробуйте использовать это:
Bitmap bmpOriginal = BitmapFactory.decodeResource(getResources(), R.drawable.img);
BitmapDrawable bmpBackground = new BitmapDrawable(getResources(), bmpOriginal)
Ответ 6
Использовать ответ @Deimos, но это так, поскольку некоторые методы устарели сейчас
Bitmap bmImg = BitmapFactory.decodeStream(is);
BitmapDrawable background = new BitmapDrawable(context.getResources(), bmImg);
linearLayout.setBackground(background);
Ответ 7
Вы также можете установить изображение из выпадающей папки.
yourView.setBackgroundResource(R.drawable.FILENAME);
Установите FILENAME как фоновое изображение.