【发布时间】:2016-04-21 13:29:54
【问题描述】:
在我的应用程序中,我正在从服务器下载图像并将图像设置为视图寻呼机。一切正常,但下载图像时会有轻微延迟(例如 Wifi 上的 8-10 秒)。图像大小范围为 200kb-800kb。我还在下载过程中添加了一个进度条,但进度条没有显示。 有人可以帮我解决这个问题。 下面是代码。
public void fetchImageUrl() {
progressBar.setVisibility(View.VISIBLE);
String url = URLMap.getUploadImgChangeStatus("get_amazonserver_image");
url = url.replace("{id}", companyId).replace("{crid}", callRecordId);
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println("Response0000" + response);
if (response.equals("[]")) {
setView();
} else {
getAmazonImageUrl(response);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("ErrorListner=", error.getMessage());
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);
}
public void getAmazonImageUrl(String response) {
try {
imgUrl = new ArrayList<>();
String[] arr;
JSONArray jArray = new JSONArray(response);
for (int i = 0; i < jArray.length(); i++) {
if (jArray.getJSONObject(i).has("ImagePath")) {
arr = jArray.getJSONObject(i).getString("ImagePath").split("\\s+");
imgUrl = Arrays.asList(arr);
}
}
} catch (JSONException e) {
}
imageViewAdapter = new ImageViewAdapter(this, iv, imgUrl, viewPager, this);
viewPager.setAdapter(imageViewAdapter);
progressBar.setVisibility(View.GONE);
}
下面是我的适配器类
public class ImageViewAdapter extends android.support.v4.view.PagerAdapter {
private Context context;
ImageView imageView;
ProgressBar progressBar;
private LayoutInflater layoutInflater;
ViewPager viewPager;
Activity activity;
List<String> imgUrl;
public ImageViewAdapter(Context context, ImageView imageView, List<String> imgUrl,
ViewPager viewPager, Activity activity){
System.out.println("Inside ImageViewAdapter");
this.context=context;
this.imageView = imageView;
this.viewPager = viewPager;
this.activity = activity;
this.imgUrl=imgUrl;
System.out.println(imgUrl.size());
}
@Override
public int getCount() {
return imgUrl.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((LinearLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View item_view = layoutInflater.inflate(R.layout.image_swipe_custom_layout, container, false);
//setting custom font
Typeface custom_font = Typeface.createFromAsset(context.getAssets(),"fonts/DroidSerif.ttf");
TextView tv = (TextView) item_view.findViewById(R.id.image_count);
tv.setTypeface(custom_font);
imageView = (ImageView) item_view.findViewById(R.id.imageView1);
progressBar=(ProgressBar)item_view.findViewById(R.id.imgLoadingPbar);
// UNIVERSAL IMAGE LOADER SETUP
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.EXACTLY)
.displayer(new FadeInBitmapDisplayer(300)).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
context)
.defaultDisplayImageOptions(defaultOptions)
.memoryCache(new WeakMemoryCache())
.discCacheSize(100 * 1024 * 1024).build();
com.nostra13.universalimageloader.core.ImageLoader.getInstance().init(config);
// UNIVERSAL IMAGE LOADER OPTION SETUP
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(R.drawable.ic_user)
.showImageOnFail(R.drawable.noimgavailable)
.showImageOnLoading(R.drawable.spinner_border).build();
/*final Animation animation= AnimationUtils.loadAnimation(context,R.anim.rotate);*/
com.nostra13.universalimageloader.core.ImageLoader imageLoader = com.nostra13.universalimageloader.core.ImageLoader.getInstance();
imageLoader.displayImage(imgUrl.get(position), imageView, options, new ImageLoadingListener() {
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingStarted(String imageUri, View view) {
progressBar.setProgress(0);
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
if(position == 0) {
tv.setText("Image " + "1");
tv.setTypeface(custom_font);
}else if(position == 1) {
tv.setText("Image " + "2");
tv.setTypeface(custom_font);
} else if(position == 2) {
tv.setText("Image " + "3");
tv.setTypeface(custom_font);
}
container.addView(item_view);
return item_view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//((ViewPager)container).removeView((View)object);
container.removeView((LinearLayout) object);
}
}
我尝试过使用毕加索,异步任务,但一切都一样。毕加索和通用图像加载器几乎需要相同的时间,但异步任务更晚。 在活动类中设置的进度条显示一两秒。但是当它进入适配器类时,我有另一个没有显示的进度条。 我的问题是 1.有什么方法可以让我更快地下载图片 2.如何正确使用进度条。 提前致谢
【问题讨论】:
标签: android universal-image-loader