Skip to content

Instantly share code, notes, and snippets.

@Yosuke-Kawakami
Last active August 29, 2015 14:01
Show Gist options
  • Save Yosuke-Kawakami/803e0233431cc00e4fa6 to your computer and use it in GitHub Desktop.
Save Yosuke-Kawakami/803e0233431cc00e4fa6 to your computer and use it in GitHub Desktop.
https://gist.github.com/Yosuke-Kawakami/9777872 の派生。Volley の ImageLoader を拡張して画像取得中は ProgressBar を表示させるようにしてみた。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ProgressBar
android:id="@+id/row_progress"
style="@android:style/Widget.ProgressBar.Large.Inverse"
android:layout_width="wrap_content"
android:layout_height="50sp"
android:layout_margin="10sp" />
<ImageView
android:id="@+id/row_image"
android:layout_width="wrap_content"
android:layout_height="50sp"
android:layout_margin="10sp"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/row_title"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:choiceMode="singleChoice"
android:gravity="center_vertical"
android:text="@string/app_name" />
</LinearLayout>
package org.example.test;
import java.util.List;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageContainer;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.Volley;
import jp.co.deltawing.tweetline.tour2.BitmapCache;
import jp.co.deltawing.tweetline.tour2.MyImageLoader;
import jp.co.deltawing.tweetline.tour2.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class CustomAdapter extends ArrayAdapter<CustomData>{
private LayoutInflater _layoutInflater;
private RequestQueue _requestQueue;
private ImageLoader _imageLoader;
public CustomAdapter(Context context, int textViewResourceId, List<CustomData> objects){
super(context, textViewResourceId, objects);
_layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
_requestQueue = Volley.newRequestQueue(getContext());
_imageLoader = new ImageLoader(_requestQueue, new BitmapCache());
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView != null){
viewHolder = (ViewHolder) convertView.getTag();
}
else{
convertView = _layoutInflater.inflate(R.layout.custom_list, null);
viewHolder = new ViewHolder();
viewHolder.progressBar = (ProgressBar)convertView.findViewById(R.id.row_progress);
viewHolder.textView = (TextView)convertView.findViewById(R.id.row_title);
viewHolder.imageView = (ImageView)convertView.findViewById(R.id.row_image);
convertView.setTag(viewHolder);
}
CustomData item = (CustomData)getItem(position);
viewHolder.textView.setText(item.getTitle());
ImageContainer imageContainer = (ImageContainer)viewHolder.imageView.getTag();
if(imageContainer != null){
imageContainer.cancelRequest();
}
ImageListener imageListener = MyImageLoader.getImageListener(viewHolder.imageView, viewHolder.progressBar, android.R.drawable.ic_delete);
viewHolder.imageView.setTag(_imageLoader.get(item.getBitmapUrl(), imageListener));
return convertView;
}
/*
*
*
*
*
*
*
* 内部クラスなー
*
*/
private class ViewHolder {
ProgressBar progressBar;
TextView textView;
ImageView imageView;
}
}
package org.example.test;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import com.android.volley.RequestQueue;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
public class MyImageLoader extends ImageLoader {
public MyImageLoader(RequestQueue queue, ImageCache imageCache) {
super(queue, imageCache);
}
/**
*
* @param view
* @param progressBar
* @param errorImageResId
* @return
*/
public static ImageListener getImageListener(final ImageView view, final ProgressBar progressBar, final int errorImageResId) {
return new ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (errorImageResId != 0) {
view.setImageResource(errorImageResId);
}
else {
view.setImageResource(android.R.drawable.ic_menu_report_image);
}
if (progressBar != null) {
progressBar.setVisibility(View.GONE);
}
}
@Override
public void onResponse(ImageContainer response, boolean isImmediate) {
if (response.getBitmap() != null) {
view.setImageBitmap(response.getBitmap());
if (progressBar != null) {
progressBar.setVisibility(View.GONE);
}
}
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment