如何使用视图寻呼机有效地加载图像?

How to efficiently do Image loading using view pager?

我在我的应用程序中使用 ViewPager,所有图像都来自服务器。一切正常,但图像在屏幕上显示需要花费很多时间,任何人都可以说出问题所在,以下是我的代码片段。或者有什么有效的加载图片的方法吗?

public class FullImage extends Activity{

private String strtd;
String[] imgStr;
ImageView imageView;
ArrayList<String> userImgArrayList;
String[] myURLs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.full_image_view);

    //strtd = getIntent().getStringExtra("profile_pic");
    userImgArrayList = getIntent().getStringArrayListExtra("user_images");


    ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
       ImageAdapter adapter = new ImageAdapter(this);
       viewPager.setAdapter(adapter);

     imageView = (ImageView) findViewById(R.id.full_image_view);

   }

       public Bitmap getResizedBitmap(Bitmap image, int bitmapWidth,
        int bitmapHeight) {
        return Bitmap.createScaledBitmap(image, bitmapWidth, bitmapHeight,
            true);
   }
public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
    int width = image.getWidth();
    int height = image.getHeight();

    float bitmapRatio = (float)width / (float) height;
    if (bitmapRatio > 0) {
        width = maxSize;
        height = (int) (width / bitmapRatio);
    } else {
        height = maxSize;
        width = (int) (height * bitmapRatio);
    }
    return Bitmap.createScaledBitmap(image, width, height, true);
    }
         public class ImageAdapter extends PagerAdapter {
     Context context;
      ImageAdapter(Context context)
     {
     this.context=context;
     }
      @Override
      public int getCount() {
      return userImgArrayList.size();
      }

      @Override
        public void destroyItem(View container, int position, Object object) {
             ((ViewPager) container).removeView((View) object);
        }
     @Override
     public boolean isViewFromObject(View view, Object object) {
     return view == ((ImageView) object);
     }

     @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = new ImageView(context);
            int padding = context.getResources().getDimensionPixelSize(
                    R.dimen.activity_horizontal_margin);
            imageView.setPadding(padding, padding, padding, padding);
            //imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            Picasso.with(context).load(userImgArrayList.get(position)).into(imageView);

            /*for(int i=0; i<myURLs.length;i++)
            { 

                try {
                    url = new URL(myURLs[i]);
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                try {
                    bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 imageView.setImageBitmap(bmp);
            }
            */
            // imageView.setImageURI(Uri.parse(imgStr[position]));
            ((ViewPager) container).addView(imageView, 0);
            return imageView;
        }
     }

不知道调整大小的图片能不能解决你的问题,试试看吧

x,y 是图像所需的宽度和高度

Picasso.with(context).load(userImgArrayList.get(position)).resize(x, y) .into(imageView);

根据我的说法,通用图像加载器要好得多,它在设置通用图像加载器时有点痛苦,但我认为它具有更好的图像缓存功能 您可以在此处查看示例 Universal image loader sample

如果我说你可以在服务器端调整图片的大小,那么将用户上传的所有图片调整到不丢失宽高比的大小,这样大多数图片加载起来会更流畅

请仔细阅读Google的官方信息,可能会对您有所帮助:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

这是另一个问题,解释得很好:Android - Efficient way to load multiple images from remote server

抱歉链接太多,但这些链接有足够的信息:http://android-vogue.blogspot.jp/2013/01/loading-large-bitmaps-efficiently-in.html