2013-03-19 3 views
0

У меня уже есть список с изображениями, загруженными с url. Я хочу добавить что-то вроде кружащегося круга в каждое изображение во время его загрузки. На данный момент я использовал i по умолчанию в качестве замены загружаемого изображения до его загрузки. В основном я вижу, что все классы расширяют AsyncTask. Ну, что у меня есть:Добавить анимацию загрузочного круга во время загрузки изображений

У меня есть работа, где выполняется парсинг json. Тогда у меня есть MyCustomAdapter, который проходит BaseAdapter:

//constructor 
    public MyCustomAdapter (Context c, List<RowItem> items){ 
    this.context = c; 
    this.sRowItems = items; 
    imageLoader=new ImageLoader(c.getApplicationContext()); 
} 
. 
. 
. 

public View getView(int position, View convertView, ViewGroup parent){ 
    ViewHolder holder = null; 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    if(convertView == null){ 
     convertView = inflater.inflate(R.layout.list_layout, null); 
     holder = new ViewHolder(); 
     holder.txtName = (TextView) convertView.findViewById(R.id.name); 
     holder.txtDesc = (TextView) convertView.findViewById(R.id.desc); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.prof_pic); 



     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    RowItem sItem = (RowItem) getItem(position); 

    holder.txtName.setText(sItem.getShopName()); 
    holder.txtDesc.setText(sItem.getShopDesc()); 
    imageLoader.DisplayImage(sItem.getImageUrl(), holder.imageView); 

    return convertView; 
} 

Тогда у меня есть свой класс образ загрузчика. Поэтому вместо AsyncTask я использовал обычные потоки java. часть этого заключается в следующем:

public class ImageLoader { 

    MemoryCache memoryCache=new MemoryCache(); 
    FileCache fileCache; 
    private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>()); 
    ExecutorService executorService; 

public ImageLoader(Context context){ 
    fileCache=new FileCache(context); 
    executorService=Executors.newFixedThreadPool(5); 
} 

final int stub_id=R.drawable.ic_launcher; 

public void DisplayImage(String url, ImageView imageView) 
{ 
    imageViews.put(imageView, url); 
    Bitmap bitmap=memoryCache.get(url); 
    if(bitmap!=null) 
     imageView.setImageBitmap(bitmap); 
    else 
    { 
     queuePhoto(url, imageView); 
     imageView.setImageResource(stub_id); 
    } 
} 

private void queuePhoto(String url, ImageView imageView) 
{ 
    PhotoToLoad p=new PhotoToLoad(url, imageView); 
    executorService.submit(new PhotosLoader(p)); 
} 

Я видел ответы здесь в StackOverflow использовать

ProgressDialog mDialog = new ProgressDialog(getApplicationContext()); 

Но он не работает с моим кодом, когда я положил его в моем классе ImageLoader. Мне очень трудно реализовать этот кружок анимации загрузки. Любая помощь пожалуйста. Огромное спасибо.

ответ

4

Иметь прогрессбар в каждом элементе списка. Всякий раз, когда вы загружаете изображение, скройте этот индикатор прогресса [установите видимость GONE]. Ваш XML должен выглядеть

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:id="@+id/imgToBeSet" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:contentDescription="@string/img_cont_desc_common" /> 

    <ProgressBar 
     android:id="@+id/imgProgress" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/textMsg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imgToBeSet" 
     android:layout_centerHorizontal="true" 
     android:visibility="gone" 
     android:text="@string/msg_download_failed" /> 

</RelativeLayout> 

Кроме того у меня есть текстовое представление, которое показывает, если загрузка не работает, в вашем случае, вы можете удалить этот текст просматривать и показывать изображение по умолчанию и скрыть прогрессбар, если происходит сбой загрузки.

+0

ладно, я дам это, я выстрелил .. – elL

0

в предварительно Execute:

ProgressDialog pd= new ProgressDialog(getApplicationContext()); 
pd.setMessage("Please wait while Image lis being loaded"); 
pd.show(); 

в doInBackground():

pd.setMessage("Downloading image ...."); 

в postExecute:

pd.setMessage(""); 
pd.dismiss(); 
+0

но им не используя AsyncTask .. – elL

+0

Используйте Progressbar из макета палитры в ваш XML, как это: XML: ProgressBar p = (ProgressBar) findViewById (R.id.pb); p.setEnabled (true); – 2013-03-19 18:54:21

Смежные вопросы