簡體   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