【问题标题】:Set Background of RelativeLayout with downloaded Image with Universal Image Loader使用通用图像加载器为下载的图像设置相对布局的背景
【发布时间】:2014-01-24 00:19:40
【问题描述】:

我想设置一张图片(从互联网下载)作为我的相对布局的背景,具有透明属性。

以下是我的 layout.xml 文件中的内容:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:id="@+id/mainLayout"
    android:alpha="0.75" >
....
</RelativeLayout>

这就是我想要从活动中做的事情:

     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initializeImageLoader();
        String imageUri = "http://www.laederach.com/fileadmin/img/filialen/zermatt/zermattBg.jpg";

        Bitmap bitmap = imageLoader.loadImageSync(imageUri1);


        relativeLayout = (RelativeLayout)findViewById(R.id.mainLayout);
        Drawable d =new BitmapDrawable(getResources(),bitmap);
        relativeLayout.setBackground(new BitmapDrawable(bitmap));
    }

    private void initializeImageLoader() {
        // Create global configuration and initialize ImageLoader with this configuration
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
            .build();
        ImageLoader.getInstance().init(config);

    }

但它不起作用。知道为什么这不起作用或我缺少什么吗?谢谢。

【问题讨论】:

    标签: android background android-relativelayout android-drawable universal-image-loader


    【解决方案1】:

    这可能是因为您尝试在主线程上使用网络连接。尝试使用这样的东西:

     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         initializeImageLoader();
         String imageUri = "http://www.laederach.com/fileadmin/img/filialen/zermatt/zermattBg.jpg";
    
         new AsyncTask <Void, Void, Void> () {
    
             @Override
             protected Void doInBackground(Void...params) {
                 Bitmap bitmap = imageLoader.loadImageSync(imageUri1);
    
                 return null;
             }
    
             protected void onPostExecute(Void result) {
    
                 relativeLayout = (RelativeLayout) findViewById(R.id.mainLayout);
                 Drawable d = new BitmapDrawable(getResources(), bitmap);
                 relativeLayout.setBackground(new BitmapDrawable(bitmap));
    
             };
         }.execute();
     }
    
     private void initializeImageLoader() {
         // Create global configuration and initialize ImageLoader with this configuration
         ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
             .build();
         ImageLoader.getInstance().init(config);
    
     }
    

    【讨论】:

      【解决方案2】:

      使用这个库:-

      https://github.com/nostra13/Android-Universal-Image-Loader/

      里面有一个示例,它是一个非常好的库。 以下是使用它的基本思想:- 有关更多信息,请参阅库示例:-

      ImageLoader imageLoader = ImageLoader.getInstance();
      DisplayImageOptions options = new DisplayImageOptions.Builder()
                              .showImageOnLoading(R.drawable.ic_stub)
                              .showImageForEmptyUri(R.drawable.ic_empty)
                              .showImageOnFail(R.drawable.ic_error)
                              .cacheInMemory(true)
                              .cacheOnDisc(true)
                              .considerExifParams(true)
                              .displayer(new RoundedBitmapDisplayer(20))
                              .build();
      
      imageview = (ImageView)findViewById(R.id.imageView1);
      imageLoader.displayImage(imageUri[position], imageView, options, animateFirstListener);
      
      //Inner class to animate pics to display
      private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {
      static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
      
                      @Override
                      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                              if (loadedImage != null) {
                                      ImageView imageView = (ImageView) view;
                                      boolean firstDisplay = !displayedImages.contains(imageUri);
                                      if (firstDisplay) {
                                              FadeInBitmapDisplayer.animate(imageView, 500);
                                              displayedImages.add(imageUri);
                                      }
                              }
                      }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多