繁体   English   中英

Android下载图像列表并在带有进度对话框的viewpager中显示图像

[英]Android download list of images and show images in viewpager with progress dialog

嗨,我正在尝试在viewPager中显示一些图像,这些图像需要在显示前下载,并且我还需要在下载时显示进度条。 谁能帮我解决这个问题。 我也试图以所有viewpager适配器形式列表视图适配器。 这是一个好习惯吗? 下面是我的代码

这是我的列表适配器

public class adapter extends ArrayAdapter<FriendList> {

private Context context;
private List<FriendList> frndList;
ProgressDialog mProgressDialog;
LinearLayout inHorizontalScrollView;
View view;
public adapter(Context context, int resource, List<FriendList> objects) {
    super(context, resource, objects);
    this.context = context;
    this.frndList = objects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.item_file, parent, false);
    FriendList friensList = frndList.get(position);
    Log.v("=====================","======111111========"+friensList);
    Friend temp = friensList.getFriend();
    Log.v("=====================","======temp========"+temp);
    //inHorizontalScrollView = (LinearLayout)view.findViewById(R.id.inhorizontalscrollview);
    List<String> imageArra = temp.getImageData();
    Log.v("=====================","======imageArra========"+imageArra.size());

    ViewPager myPager = (ViewPager) view.findViewById(R.id.myfivepanelpager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(context);
    myPager.setAdapter(adapter);
    adapter.change(imageArra);

    return view;
}

}

这是我的viewpager适配器

 public class ViewPagerAdapter extends PagerAdapter {

/* Adapter activity;
 int imageArray[];
 private Context context;


 public ViewPagerAdapter( Context context, int[] imgArra) {
     imageArray = imgArra;
     //activity = act;
     context = context;
 }*/
ProgressDialog mProgressDialog;

private List<String> mPaths;

private Context mContext;

public ViewPagerAdapter(Context cx) {
    mContext = cx.getApplicationContext();
}

public void change(List<String> paths) {
    mPaths = paths;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return mPaths.size();
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    ImageView iv = new ImageView(mContext);
    String path = mPaths.get(position);
    Log.v("=====================","======path====11===="+path);
    new calc_stanica().execute(path, container, iv);


    try {
        Bitmap bitmap = Glide.with(mContext).load(path).asBitmap().into(-1, -1).get();
        //Bitmap bm = BitmapFactory.decodeFile(mPaths.get(position));
        iv.setImageBitmap(bitmap);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ((ViewPager) container).addView(iv, 0);
    return iv;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

@Override
public boolean isViewFromObject(View view, Object obj) {
    // TODO Auto-generated method stub
    return view == (View) obj;
}


private class calc_stanica extends AsyncTask<Object, Void, Bitmap> {
    ViewGroup container;
    ImageView iv;

    /*@Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(mContext);
        // Set progressdialog title
        mProgressDialog.setTitle("Download Image Tutorial");
        // Set progressdialog message
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();
    }*/

    @Override
    protected Bitmap doInBackground(Object... params) {

        //ArrayList<Bitmap> result = new ArrayList<Bitmap>();
        String pass = (String) params[0];
        container = (ViewGroup) params[1];
        iv = (ImageView) params[2];
        //View str = (View) params[1];
        //Context ctx = (Context) params[2];
        //Log.v("================", "===passed========" + passed);


        Bitmap bitmap = null;
        try {
            // Download Image from URL
            //InputStream input = new java.net.URL(imageURL).openStream();
            // Decode Bitmap
            bitmap = Glide.with(mContext).load(pass).asBitmap().into(-1, -1).get();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //int intArray[] = new int[bitmap.getWidth()*bitmap.getHeight()];
        //result.add(bitmap);


        //Log.v("================", "===result========" + result);
        //Some calculations...

        return bitmap; //return result
    }

    //*protected Bitmap doInBackground(String... URL) {

   /* String imageURL = URL[0];

    Bitmap bitmap = null;
    ArrayList<Bitmap> list;

    try {
        // Download Image from URL
        //InputStream input = new java.net.URL(imageURL).openStream();
        // Decode Bitmap
        bitmap =  Glide.with(getApplicationContext()).load(imageURL).asBitmap().into(-1, -1).get();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return bitmap;*/

    @Override
    protected void onPostExecute(Bitmap result) {

        if(result  != null) {
            iv.setImageBitmap(result);
            ((ViewPager)container).addView(iv, 0);
        }

        //mProgressDialog.dismiss();
    }

}

}

它在获取计数时给了我错误,并且不允许在适配器中添加进度条。

从更改代码顺序

myPager.setAdapter(adapter);
adapter.change(imageArra);

adapter.change(imageArra);
myPager.setAdapter(adapter);

因为设置适配器时,将在仅分配列表之后调用适配器的getCount
更新资料
我认为您应该检查以下更多说明:

  1. 确保imageArra不为空并且图像path正确。
  2. 您应该为myfivepanelpager添加一个固定的高度。
  3. 不要将mContext存储在ViewPagerAdapter ,您不需要。
  4. instantiateItemImageView iv = new ImageView(mContext); 不要使用应用程序上下文,请使用container.getContext()
  5. 您不需要这个new calc_stanica().execute(path, container, iv); 因为已经使用了Glide
  6. 更改Bitmap bitmap = Glide.with(mContext).load(path).asBitmap().into(-1, -1).get(); //Bitmap bm = BitmapFactory.decodeFile(mPaths.get(position)); iv.setImageBitmap(bitmap); Bitmap bitmap = Glide.with(mContext).load(path).asBitmap().into(-1, -1).get(); //Bitmap bm = BitmapFactory.decodeFile(mPaths.get(position)); iv.setImageBitmap(bitmap);

    Glide.with(mContext).load(path).asBitmap().into(iv)
    如果您遇到滑行负载不正确的图像的问题,请阅读
  7. ((ViewPager) container).addView(iv, 0); ,对此我不确定,但我认为应该是((ViewPager) container).addView(iv);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM