0

JSON在 Splash screen 时进行了解析,其中图像 url 被解析为 login screen 的背景图像。这是登录屏幕的示例XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/loginLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_bg"  <!-- I want to change this background dynamically. --> 
android:focusableInTouchMode="true"
android:gravity="center"
tools:context=".activity.LoginActivity" >

<ScrollView
    android:id="@+id/mainScrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

 <!-- .... Here is edit text for login inputs and buttuns for singnup and login. -->

    </LinearLayout>
</ScrollView>   
</RelativeLayout>

在上面我已经在背景中放置了静态图像,RelativeLayout但我想根据图像 url 将背景设置为可更改的。

提前致谢。

4

3 回答 3

1

您需要将 url 图像转换为位图,然后将位图图像转换为 Drawable 并将其设置为 RelativeLayout。

首先将url图片转换为位图,见示例代码。

Bitmap myImage = getBitmapFromURL("http://looksok.files.wordpress.com/2011/12/me.jpg");

取RelativeLayout 参考

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

BitmapDrawable(obj) 将 Bitmap 对象转换为可绘制对象。

Drawable dr = new BitmapDrawable(myImage);
rLayout.setBackgroundDrawable(dr);

url图片到位图的转换方法

 public Bitmap getBitmapFromURL(String imageUrl) {
        try {
            URL url = new URL(imageUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
于 2014-08-06T03:55:25.197 回答
0

试试这个方法,希望这能帮助你解决你的问题。

  1. 从这里下载最新的 AndroidQuery jar :

  2. 将此 jar 放入您的 libs 文件夹,然后右键单击 jar 和 Build Path -> Add to bulid path。

  3. 如何使用看这个例子:

    AQuery androidQuery = new AQuery(this);

    androidQuery.ajax(url.trim(), Bitmap.class, 0, new AjaxCallback<Bitmap>() {
         @Override
         public void callback(String url, Bitmap object, AjaxStatus status) {
             super.callback(url, object, status);
             yourRelativeLayout.setBackground(new BitmapDrawable(object));
         }
    });
    
于 2014-08-06T04:23:01.727 回答
0

我会这样做

像这样调用 AsyncTask

 new GetImageFromServer().execute(strUrl);  // strUrl is your URL

这是 AsyncTask 类

public class GetImageFromServer extends AsyncTask<String, Void, Bitmap>
    {


        private Bitmap image;

        protected void onPreExecute(){
            super.onPreExecute();

        }

        @Override
        protected Bitmap doInBackground(String... params){
            try{

                URL urli = new URL(params[0].trim());
                URLConnection ucon = urli.openConnection();
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 2;


                image = BitmapFactory.decodeStream(ucon.getInputStream(),null,options);

            } catch (MalformedURLException e) {

                e.printStackTrace();
            } catch (IOException e) {

                e.printStackTrace();
            }
            return image;  //<<< return Bitmap
        }
        @Override
        protected void onPostExecute(Bitmap result){ 

             RelativeLayout relative = (RelativeLayout) findViewById(R.id.loginLayout);
             Drawable dr = new BitmapDrawable(result);
             relative.setBackgroundDrawable(dr);

            }


    }
于 2014-08-06T04:31:05.887 回答