今天有时间就学习了下在ListView、GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法返回的View是一个自定义控件的话,有点不好实现哦,不过可以用两个控件之间Visible 、Invisible来切换实现今天的效果,下面的例子是主类、适配器、异步下载类等的都写在一个类里面了,为的是发的博文里一次性看的话方便,如果大家觉得结构不清楚的话根据自身需求自行抽取下,今天的DEMO只是个简单的思路,其它控件列表项中添加进度框大家也可以用如下的方法实现,老规矩,先看效果,再看代码:

 

(截图有点失真,但无防)

一:效果图如下

二:效果看完了,看下实现的路是怎样的,吼吼:核心代码如下:

 


   
   
  1. package com.example.listviewitemprogress; 
  2.  
  3. import java.io.InputStream; 
  4. import java.net.HttpURLConnection; 
  5. import java.net.URL; 
  6.  
  7. import android.app.Activity; 
  8. import android.content.Context; 
  9. import android.graphics.Bitmap; 
  10. import android.graphics.BitmapFactory; 
  11. import android.os.AsyncTask; 
  12. import android.os.Bundle; 
  13. import android.view.LayoutInflater; 
  14. import android.view.View; 
  15. import android.view.ViewGroup; 
  16. import android.widget.BaseAdapter; 
  17. import android.widget.Button; 
  18. import android.widget.ImageView; 
  19. import android.widget.ListView; 
  20. import android.widget.ProgressBar; 
  21. import android.widget.TextView; 
  22.  
  23. /** 
  24.  * @author 小马果 
  25.  * ListView列表项中添加ProgressBar 
  26.  */ 
  27. public class MainActivity extends Activity { 
  28.  
  29.     private ListView mListView = null ;  
  30.     private static final String imgUrl = "http://www.qq510.net/uploads/allimg/100613/2_100613171230_5.jpg"
  31.     @Override 
  32.     public void onCreate(Bundle savedInstanceState) { 
  33.         super.onCreate(savedInstanceState); 
  34.         setContentView(R.layout.activity_main); 
  35.         init(); 
  36.     } 
  37.      
  38.      
  39.     private void init(){ 
  40.         mListView =  (ListView)findViewById(R.id.listview); 
  41.         mListView.setAdapter(new MyListViewAdapter(this)); 
  42.     } 
  43.      
  44.     private class MyListViewAdapter extends BaseAdapter{ 
  45.  
  46.         private LayoutInflater inflater = null;  
  47.          
  48.         public MyListViewAdapter(Context con){ 
  49.             inflater = (LayoutInflater)con.getSystemService(LAYOUT_INFLATER_SERVICE); 
  50.         } 
  51.         @Override 
  52.         public int getCount() { 
  53.             // TODO Auto-generated method stub 
  54.             return Integer.MAX_VALUE; 
  55.         } 
  56.  
  57.         @Override 
  58.         public Object getItem(int arg0) { 
  59.             // TODO Auto-generated method stub 
  60.             return arg0; 
  61.         } 
  62.  
  63.         @Override 
  64.         public long getItemId(int position) { 
  65.             // TODO Auto-generated method stub 
  66.             return position; 
  67.         } 
  68.  
  69.         @Override 
  70.         public View getView(int position, View convertView, ViewGroup parent) { 
  71.             // TODO Auto-generated method stub 
  72.             ViewHolder mHolder = new ViewHolder() ; 
  73.             if(convertView == null){ 
  74.                 convertView = inflater.inflate(R.layout.list_item, null); 
  75.                 mHolder.iv = (ImageView)(convertView.findViewById(R.id.iv)); 
  76.                 mHolder.mBtn = (Button)(convertView.findViewById(R.id.button)); 
  77.                 mHolder.pb = (ProgressBar)(convertView.findViewById(R.id.progressBar1)); 
  78.                 mHolder.tv = (TextView)(convertView.findViewById(R.id.textView1)); 
  79.                 convertView.setTag(mHolder); 
  80.             }else
  81.                 mHolder = (ViewHolder)convertView.getTag(); 
  82.             } 
  83.              
  84.             new AsyncTask<ViewHolder, Void, Bitmap>() { 
  85.                 private ViewHolder v; 
  86.  
  87.                 @Override 
  88.                 protected Bitmap doInBackground(ViewHolder... params) { 
  89.                     v = params[0]; 
  90.                     return  BitmapFactory.decodeStream(getStreamFromURL(imgUrl)); 
  91.                 } 
  92.  
  93.                 @Override 
  94.                 protected void onPostExecute(Bitmap result) { 
  95.                     super.onPostExecute(result); 
  96.                         v.pb.setVisibility(View.GONE); 
  97.                         v.mBtn.setVisibility(View.VISIBLE); 
  98.                         v.iv.setImageBitmap(result); 
  99.                 } 
  100.             }.execute(mHolder); 
  101.             return convertView; 
  102.         } 
  103.          
  104.     } 
  105.      
  106.     static class ViewHolder{ 
  107.         ImageView iv = null ;  
  108.         Button mBtn = null ; 
  109.         ProgressBar pb = null ;  
  110.         TextView tv = null ;  
  111.     } 
  112.      
  113.      
  114.     static String length; 
  115.     public static InputStream getStreamFromURL(String imageURL) { 
  116.         InputStream in=null
  117.         try { 
  118.             URL url=new URL(imageURL); 
  119.             HttpURLConnection connection=(HttpURLConnection) url.openConnection(); 
  120. //          connection.setRequestProperty("Connection", "Keep-Alive");//维持长连接 
  121.             connection.setConnectTimeout(61000);//设置连接超时 
  122.             if (connection.getResponseCode() != 200throw new RuntimeException("请求失败"); 
  123.              length = connection.getHeaderField("Content-Length"); 
  124.             in=connection.getInputStream(); 
  125.              
  126.         } catch (Exception e) { 
  127.             // TODO Auto-generated catch block 
  128.             e.printStackTrace(); 
  129.         } 
  130.         return in; 
  131.          
  132.     } 
  133.      
  134.      

 

三:再来看下两个布局吧(为方便查,小马就放一起了:)


   
   
  1. 主布局文件: 
  2.  
  3. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  4.     xmlns:tools="http://schemas.android.com/tools" 
  5.     android:layout_width="match_parent" 
  6.     android:layout_height="match_parent" > 
  7.  
  8.     <ListView 
  9.         android:id="@+id/listview" 
  10.         android:layout_width="fill_parent" 
  11.         android:layout_height="fill_parent" 
  12.         android:drawSelectorOnTop="false"  
  13.         android:choiceMode="none" 
  14.         android:focusable="false"  
  15.         android:scrollingCache="false" 
  16.         android:fadingEdge="none"  
  17.         android:focusableInTouchMode="false" 
  18.         android:clickable="false"  
  19.         android:dividerHeight="0.5dip" /> 
  20.      
  21. </RelativeLayout> 
  22.  
  23. ListView列表控件Item布局: 
  24.  
  25. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  26.     xmlns:tools="http://schemas.android.com/tools" 
  27.     android:layout_width="match_parent" 
  28.     android:layout_height="110dp"  
  29.     android:background="#00ffeeaa" 
  30.     > 
  31.  
  32.     <ImageView  
  33.         android:id="@+id/iv" 
  34.         android:layout_width="110dp" 
  35.         android:background="@drawable/ic_action_search" 
  36.         android:layout_height="110dp"  
  37.         android:contentDescription="@string/hello_world"/> 
  38.      
  39.     <Button 
  40.         android:id="@+id/button" 
  41.         android:layout_width="wrap_content" 
  42.         android:layout_height="wrap_content" 
  43.         android:layout_alignParentRight="true" 
  44.         android:layout_centerVertical="true" 
  45.         android:text="@string/xiaomaguo"/> 
  46.  
  47.     <ProgressBar 
  48.         android:id="@+id/progressBar1" 
  49.         android:layout_width="wrap_content" 
  50.         android:layout_height="wrap_content" 
  51.         android:layout_alignParentLeft="true" 
  52.         android:layout_centerVertical="true" 
  53.         android:layout_alignTop="@+id/button" 
  54.         android:layout_marginLeft="29dp" /> 
  55.  
  56.     <TextView 
  57.         android:id="@+id/textView1" 
  58.         android:layout_width="wrap_content" 
  59.         android:layout_height="wrap_content" 
  60.         android:layout_alignBaseline="@+id/button" 
  61.         android:layout_alignBottom="@+id/button" 
  62.         android:layout_centerVertical="true" 
  63.         android:layout_toLeftOf="@+id/button" 
  64.         android:text="@string/cool" /> 
  65.      
  66. </RelativeLayout> 

 

 最后,由于选项中使用的图片是小马从网上异步下载加载的,所以得开下联网权限,大家别忘了加就行了,如下:

     <uses-permission      android:name="android.permission.INTERNET"/>

 

     怎么样?简单吧,刚开始的时间没思路,后来玩花辨的时候想到了,美丽说瀑布流实现的原理跟这个差不多,上面这个只是个小的DEMO,给大家提供个思路,GridView等其它控件,大家可以直接参照上面这个代码来写,吼吼,小DEMO源码已经加在附件中,觉得有用就下下来瞅瞅吧,加油,每天进步一点点,祝 :Happy ! O_O