【问题标题】:Display Custom Size Image Universal ImageLoader显示自定义尺寸图片通用 ImageLoader
【发布时间】:2014-02-25 16:10:48
【问题描述】:

我正在使用 Universal ImageLoader 从服务器下载大图像并在封面流中显示它们。我在这里面临的问题是我无法为我的图像设置自定义尺寸。它只需要整个屏幕。例如,我正在下载大小为 500 x 1200 的图像 - 我想显示大小为 300 x 300 的图像。但它需要完全显示。请帮我解决这个问题,因为我被困了超过 3 天。谢谢。

代码

public class HomeCoverFlow {

    Context mContext;
    public CoverFlow coverFlow;
    ImageAdapter coverImageAdapter;
    ImageLoader imageLoader = ImageLoader.getInstance();
    DisplayImageOptions options;

     /** Called when the activity is first created. */

    public HomeCoverFlow(Context context)
    {
        mContext = context;
           options = new DisplayImageOptions.Builder()
           .showImageOnLoading(R.drawable.flyer_placeholder)
           .showImageForEmptyUri(R.drawable.flyer_placeholder)
           .imageScaleType(ImageScaleType.EXACTLY)
           .cacheInMemory(true)
           .build();

         coverFlow = new CoverFlow(context);

         coverImageAdapter =  new ImageAdapter(mContext);

         coverFlow.setAdapter(coverImageAdapter);

         coverFlow.setSpacing(-25);
         coverFlow.setSelection(2, true);
         coverFlow.setAnimationDuration(1000);

         coverFlow.setGravity(Gravity.CENTER_VERTICAL);


            // HEIGHT
            coverImageAdapter.coverflowHeight = 100; //display.getHeight() / 3;

            //WIDTH
            coverImageAdapter.coverflowWidth = 100;// display.getWidth() / 2;


        }

adapter中创建item视图的方法,这里我使用imageloader来下载图片并显示

public View getView(int position, View convertView, ViewGroup parent) {

         FeaturedFlyerData data = (FeaturedFlyerData) getItem(position);

             if(data.flyerImage == null)
             {
                 setNewImage(position);
             }
             //see text or image
             if(data.displayImage)
             {
                 data.flyerImage.setBackgroundColor(Color.BLACK);

                 imageLoader.displayImage(data.url, data.flyerImage, options, null);

             }


         return data.flyerImage;

}       

void setNewImage(int position)
     {
         FeaturedFlyerData data = (FeaturedFlyerData) getItem(position);

         data.flyerImage = new ImageView(mContext);
         data.flyerImage.layout(0, 10, 200,350);
         data.flyerImage.setScaleType(ScaleType.CENTER_INSIDE);
         data.flyerImage.setTag(Integer.toString(position));
         data.flyerImage.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            imageClicked(Integer.parseInt(v.getTag().toString()));

        }
    });
    }

}

我不知道这里还提供什么代码 sn-p。如果您需要任何进一步的说明,请发表评论。谢谢。

【问题讨论】:

  • data.flyerImage 是一个 ImageView 对吗?您是否尝试设置该 ImageView 的 layout_height 和 layout_width?
  • @GlaucoNeves 是的,它是一个图像视图。我已经设置了“setNewImage”方法。请参阅我的编辑。我做得对吗?
  • 试试 data.flyerImage.getLayoutParams().height = 100; data.flyerImage.getLayoutParams().width = 100;
  • @GlaucoNeves 我得到nullpointerexception 使用它。可能它对图像视图无效。

标签: android image universal-image-loader coverflow


【解决方案1】:

我正在使用以下代码使用通用图像加载器在封面流中显示自定义大小的图像。

在构造函数中,将DisplayImageOptions设置为:

DisplayImageOptions options = new DisplayImageOptions.Builder()
      .showImageOnLoading(R.drawable.flyer_placeholder)
      .showImageForEmptyUri(R.drawable.flyer_placeholder)
      .imageScaleType(ImageScaleType.EXACTLY)
      .cacheInMemory(true)
      .build();

//set coverflow full screen, and images size.

         coverFlow.setSpacing(-25);
         coverFlow.setAnimationDuration(1000);
         coverFlow.setGravity(Gravity.CENTER_VERTICAL);
         coverFlow.setLayoutParams(new CoverFlow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

         // GET SCREEN SIZE
            WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();

            DisplayMetrics dm = new DisplayMetrics();
            display.getMetrics(dm);

//Here I am setting image size using my custom adapter in "dp". Avoid to use pixels as things will mess up for different screen sizes

            coverImageAdapter.coverflowWidth = (int) Math.ceil(dm.widthPixels * (dm.densityDpi / 160.0));
            coverImageAdapter.coverflowHeight = (int) Math.ceil(dm.heightPixels * (dm.densityDpi / 160.0)) / 2;

在适配器的setNewImage 方法(在getView 中调用)中,使用Gallery.LayoutParams

void setNewImage(int position)
 {
     FeaturedFlyerData data = (FeaturedFlyerData) getItem(position);

     data.flyerImage = new ImageView(mContext);      
     data.flyerImage.setLayoutParams(new Gallery.LayoutParams(coverflowWidth, coverflowHeight));
     data.flyerImage.setScaleType(ScaleType.CENTER_INSIDE);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多