изменить фоновое изображение Framelayout через URL - PullRequest
4 голосов
/ 21 декабря 2011

можно ли использовать url для установки background для framelayout?

Пример: я хочу использовать URL-адрес типа this в качестве фона framelayout.

Что я действительно хочу достичь, так это то, что когда моя деятельность загружается, она извлекает изображение из моего домена и использует его в качестве фонового изображения для разметки рамки.я смог сделать это, но я использовал изображение и кнопку.

ниже приведен код, который я использую:

public class MyAppActivity extends Activity {

ImageView imView;
    String imageUrl= "http://www.mydomain.com/resource/images/";

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
Button bt3= (Button)findViewById(R.id.postbutton);
bt3.setOnClickListener(getImgListener);

}
View.OnClickListener getImgListener = new View.OnClickListener()
{

      public void onClick(View view) {

           downloadFile(imageUrl+"image"+".png");
           Log.i("im url",imageUrl+"image"+".png");
      }

};


Bitmap bmImg;
void downloadFile(String fileUrl){
      URL myFileUrl =null;          
      try {
           myFileUrl= new URL(fileUrl);
      } catch (MalformedURLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
      }
      try {
           HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
           conn.setDoInput(true);
           conn.connect();
           InputStream is = conn.getInputStream();

           bmImg = BitmapFactory.decodeStream(is);
           imView.setImageBitmap(bmImg);
      } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
      }
 }

 }

и вотмои XML коды:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/rakistaradiobg"
android:orientation="vertical" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="98dp"
    android:layout_gravity="bottom|center"
    android:scaleType="fitXY"
    android:src="@drawable/btnbg" />

<Button
    android:id="@+id/postbutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:text="Button" />

Ответы [ 4 ]

4 голосов
/ 21 декабря 2011

Что-то заинтересовало, (я никогда не пробовал, но это должно работать)

FrameLayout fm = (FrameLayout)findViewById(R.id.FrameLayout01);      
Drawable drw = ImageOperations(this,url,filename)
fm.setBackgroundDrawable(drw)

Конвертируйте URL вашего изображения в Drawable, используя

private Drawable ImageOperations(Context ctx, String url, String saveFilename) {
        try {
            InputStream is = (InputStream) this.fetch(url);
            Drawable d = Drawable.createFromStream(is, saveFilename);
            return d;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public Object fetch(String address) throws MalformedURLException,IOException {
        URL url = new URL(address);
        Object content = url.getContent();
        return content;
    }

Попробуйте и дайте мне знать, что произойдет..

0 голосов
/ 02 мая 2014
private RelativeLayout myRelativeLauout;

myRelativeLauout = (RelativeLayout)findViewById(R.id.rlBg);  
new LoadBackground("http://www.tmonews.com/wp-content/uploads/2012/10/androidfigure.jpg",
            "androidfigure").execute();


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);
        myRelativeLauout.setBackgroundDrawable(result);
    }
}
0 голосов
/ 21 декабря 2011

вот код, который вы можете получить в растровом изображении с URL

 Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent());

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

и после получения рисовать применить в макете, как

framelyt.setBackgroundDrawable(d);
0 голосов
/ 21 декабря 2011

Вы можете использовать WebView для отображения содержимого сайта. Существует также замечательный учебник по использованию WebView на сайте разработчиков Android

...