Android BaseAadapter 異步加載圖片方法

BaseAdapter就Android應用程序中常常用到的基礎數據適配器,它的主要用途是將一組數據傳到像ListView、Spinner、Gallery及GridView等UI顯示組件,它是繼承自接口類Adapter,android

一、Adapter類簡介數組

1)、Adapter相關類結構以下圖所示:網絡

Adapter

自定義Adapter子類,就須要實現上面幾個方法,其中最重要的是getView()方法,它是將獲取數據後的View組件返回,如ListView中每一行裏的TextView、Gallery中的每一個ImageView。app

     2)、Adapter在Android應用程序中起着很是重要的做用,應用也很是普遍,它可看做是數據源和UI組件之間的橋樑,其中Adapter、數據和UI之間的關係,能夠用下圖表示:異步

t2A9A

3)、經常使用子類ide

Adapter經常使用子類

二、BaseAdapter簡介
BaseAdapter是實現了ListAdapter和SpinnerAdapter兩個接口,固然它也能夠直接給ListView和Spinner等UI組件直接提供數據。佈局

相關類結構以下圖所示:this

tCCA2

三、示例url

示例一:Gallery顯示一組圖片spa

運行結果:


說明:上面一行圖片是Gallery畫廊,每次點擊一個Gallery圖片時,會同時在下面以大圖形式顯示出來該圖片

佈局文件:

複製代碼

  <?
   
 
   
 
   xml version="1.0" encoding="utf-8"
   
 
   
 
   ?>
   
 
   
 
    
   
 
   
 
   <
   
 
   
 
   LinearLayout 
   
 
   
 
   xmlns:android
   
 
   
 
   ="http://schemas.android.com/apk/res/android"
   
 
   
 
    android:orientation
   
 
   
 
   ="vertical"
   
 
   
 
    android:layout_width
   
 
   
 
   ="fill_parent"
   
 
   
 
    android:layout_height
   
 
   
 
   ="fill_parent"
   
 
   
 
    
   
 
   
 
   >
   
 
   
 
    
   
 
   
 
   <
   
 
   
 
   TextView 
   
 
   
 
   android:layout_width
   
 
   
 
   ="fill_parent"
   
 
   
 
    android:layout_height
   
 
   
 
   ="wrap_content"
   
 
   
 
    android:text
   
 
   
 
   ="@string/hello"
   
 
   
 
    
   
 
   
 
   />
   
 
   
 
    
   
 
   
 
   <
   
 
   
 
   Gallery 
   
 
   
 
   android:id
   
 
   
 
   ="@+id/gallery1"
   
 
   
 
    android:layout_width
   
 
   
 
   ="match_parent"
   
 
   
 
    android:spacing
   
 
   
 
   ="5px"
   
 
   
 
    android:layout_height
   
 
   
 
   ="wrap_content"
   
 
   
 
    
   
 
   
 
   ></
   
 
   
 
   Gallery
   
 
   
 
   >
   
 
   
 
    
   
 
   
 
   <
   
 
   
 
   ImageView 
   
 
   
 
   android:id
   
 
   
 
   ="@+id/iv"
   
 
   
 
    android:layout_gravity
   
 
   
 
   ="center_vertical"
   
 
   
 
    android:layout_marginTop
   
 
   
 
   ="20px"
   
 
   
 
    android:layout_width
   
 
   
 
   ="320px"
   
 
   
 
    android:layout_height
   
 
   
 
   ="320px"
   
 
   
 
    
   
 
   
 
   ></
   
 
   
 
   ImageView
   
 
   
 
   >
   
 
   
 
    
   
 
   
 
   </
   
 
   
 
   LinearLayout
   
 
   
 
   >

複製代碼

MainActivity類:

複製代碼  

   package
 
    
  com.magc.adapter; 
 
    
 import
 
    
  android.app.Activity; 
 
    
 import
 
    
  android.content.Context; 
 
    
 import
 
    
  android.os.Bundle; 
 
    
 import
 
    
  android.util.Log; 
 
    
 import
 
    
  android.view.View; 
 
    
 import
 
    
  android.view.ViewGroup; 
 
    
 import
 
    
  android.view.View.OnClickListener; 
 
    
 import
 
    
  android.widget.AdapterView; 
 
    
 import
 
    
  android.widget.BaseAdapter; 
 
    
 import
 
    
  android.widget.Gallery; 
 
    
 import
 
    
  android.widget.ImageView; 
 
    
 import
 
    
  android.widget.AdapterView.OnItemClickListener; 
 
    
 public
 
    
  
 
    
 class
 
    
  MainActivity 
 
    
 extends
 
    
  Activity { 
 
    
 private
 
    
  Gallery gallery; 
 
    
 private
 
    
  ImageView imgview; 
 
    
 private
 
    
  
 
    
 int
 
    
 [] imgs 
 
    
 =
 
    
  {R.drawable.a6,R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5}; 
 
    
 /**
 
    
  Called when the activity is first created. 
 
    
 */
 
    
  @Override 
 
    
 public
 
    
  
 
    
 void
 
    
  onCreate(Bundle savedInstanceState) { 
 
    
 super
 
    
 .onCreate(savedInstanceState); setContentView(R.layout.main); imgview 
 
    
 =
 
    
  (ImageView)findViewById(R.id.iv); gallery 
 
    
 =
 
    
  (Gallery)findViewById(R.id.gallery1); MyImgAdapter adapter 
 
    
 =
 
    
  
 
    
 new
 
    
  MyImgAdapter(
 
    
 this
 
    
 ); gallery.setAdapter(adapter); gallery.setOnItemClickListener(
 
    
 new
 
    
  OnItemClickListener() { 
 
    
 //
 
    
 用戶點擊圖片時,將該圖片的ResourceID設到下面的ImageView中去,
 
    
  
 
    
  @Override 
 
    
 public
 
    
  
 
    
 void
 
    
  onItemClick(AdapterView
 
    
 <?>
 
    
  arg0, View view, 
 
    
 int
 
    
  position, 
 
    
 long
 
    
  arg3) { imgview.setImageResource(imgs[position]); } }); } 
 
    
 class
 
    
  MyImgAdapter 
 
    
 extends
 
    
  BaseAdapter {      //自定義圖片Adapter之內部類形式存在於MainActivity中,方便訪問MainActivity中的各個變量,特別是imgs數組 
 
    
 private
 
    
  Context context;
 
    
 //
 
    
 用於接收傳遞過來的Context對象
 
    
  
 
    
  
 
    
 public
 
    
  MyImgAdapter(Context context) { 
 
    
 super
 
    
 (); 
 
    
 this
 
    
 .context 
 
    
 =
 
    
  context; } 
 
    
 /*
 
    
  (non-Javadoc) * @see android.widget.Adapter#getCount() 
 
    
 */
 
    
  @Override 
 
    
 public
 
    
  
 
    
 int
 
    
  getCount() { 
 
    
 return
 
    
  imgs.length; } 
 
    
 /*
 
    
  (non-Javadoc) * @see android.widget.Adapter#getItem(int) 
 
    
 */
 
    
  @Override 
 
    
 public
 
    
  Object getItem(
 
    
 int
 
    
  position) { 
 
    
 return
 
    
  position; } 
 
    
 /*
 
    
  (non-Javadoc) * @see android.widget.Adapter#getItemId(int) 
 
    
 */
 
    
  @Override 
 
    
 public
 
    
  
 
    
 long
 
    
  getItemId(
 
    
 int
 
    
  position) { 
 
    
 return
 
    
  position; } 
 
    
 /*
 
    
  (non-Javadoc) * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup) 
 
    
 */
 
    
  @Override 
 
    
 public
 
    
  View getView(
 
    
 int
 
    
  position, View convertView, ViewGroup parent) { 
 
    
 //
 
    
 針對每個數據(即每個圖片ID)建立一個ImageView實例,
 
    
  
 
    
  ImageView iv 
 
    
 =
 
    
  
 
    
 new
 
    
  ImageView(context);
 
    
 //
 
    
 針對外面傳遞過來的Context變量,
 
    
  
 
    
  iv.setImageResource(imgs[position]);  //在此先加載默認圖片,而後在調用異步加載網絡圖片的url。 Log.i(
 
    
 "
 
    
 magc
 
    
 "
 
    
 , String.valueOf(imgs[position])); iv.setLayoutParams(
 
    
 new
 
    
  Gallery.LayoutParams(
 
    
 80
 
    
 , 
 
    
 80
 
    
 ));
 
    
 //
 
    
 設置Gallery中每個圖片的大小爲80*80。
 
    
  
 
    
  iv.setScaleType(ImageView.ScaleType.FIT_XY); 
 
    
 return
 
    
  iv; } } }

 

複製代碼  

相關文章
相關標籤/搜索