http://www.cnblogs.com/nokiaguy/archive/2010/08/23/1806870.html
gallery元件主要用于橫向顯示圖像清單,不過按正常做法。gallery元件隻能有限地顯示指定的圖像。也就是說,如果為gallery元件指定了10張圖像,那麼當gallery元件顯示到第10張時,就不會再繼續顯示了。這雖然在大多數時候沒有什麼關系,但在某些情況下,我們希望圖像顯示到最後一張時再重第1張開始顯示,也就是循環顯示。要實作這種風格的gallery元件,就需要對gallery的adapter對象進行一番改進。
gallery元件的傳統用法
<!--[endif]-->
在實作可循環顯示圖像的gallery元件之前先來回顧一下gallery元件的傳統用法。gallery元件可以橫向顯示一個圖像清單,當單擊目前圖像的後一個圖像時,這個圖像清單會向左移動一格,當單擊目前圖像的前一個圖像時,這個圖像清單會向右移動一樣。也可以通過拖動的方式來向左和向右移動圖像清單。目前顯示的是第1個圖像的效果如圖1所示。gallery元件顯示到最後一個圖像的效果如圖2所示。

從圖2可以看出,當顯示到最後一個圖像時,清單後面就沒有圖像的,這也是gallery元件的基本顯示效果。在本文後面的部分将詳細介紹如何使gallery元件顯示到最後一個圖像時會從第1個圖像開始顯示。
好了,現在我們來看一下圖1和圖2的效果是如何做出來的吧。gallery既然用于顯示圖像,那第1步就必須要有一些圖像檔案用來顯示。現在可以随意準備一些圖像。在本文的例子中準備了15個jpg檔案(item1.jpg至item15.jpg)。将這些檔案都放在res\drawable目錄中。
下面将這些圖像的資源id都儲存在int數組中,代碼如下:
private int[] resids = new int[]
{ r.drawable.item1, r.drawable.item2, r.drawable.item3,
r.drawable.item4, r.drawable.item5, r.drawable.item6,
r.drawable.item7, r.drawable.item8, r.drawable.item9,
r.drawable.item10, r.drawable.item11, r.drawable.item12,
r.drawable.item13, r.drawable.item14, r.drawable.item15 };
在本例的main.xml檔案中配置了一個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">
<gallery android:id="@+id/gallery" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_margintop="30dp" />
</linearlayout>
現在在oncreate方法中裝載這個元件,代碼如下:
public void oncreate(bundle savedinstancestate)
{
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
// 裝載gallery元件
gallery gallery = (gallery) findviewbyid(r.id.gallery);
// 建立用于描述圖像資料的imageadapter對象
imageadapter imageadapter = new imageadapter(this);
// 設定gallery元件的adapter對象
gallery.setadapter(imageadapter);
}
在上面的代碼中涉及到一個非常重要的類:imageadapter。該類是android.widget.baseadapter的子類,用于描述圖像資訊。下面先看一下這個類的完整代碼。
public class imageadapter extends baseadapter
int mgalleryitembackground;
private context mcontext;
public imageadapter(context context)
{
mcontext = context;
// 獲得gallery元件的屬性
typedarray typedarray = obtainstyledattributes(r.styleable.gallery);
mgalleryitembackground = typedarray.getresourceid(
r.styleable.gallery_android_galleryitembackground, 0);
}
// 傳回圖像總數
public int getcount()
return resids.length;
public object getitem(int position)
return position;
public long getitemid(int position)
// 傳回具體位置的imageview對象
public view getview(int position, view convertview, viewgroup parent)
imageview imageview = new imageview(mcontext);
// 設定目前圖像的圖像(position為目前圖像清單的位置)
imageview.setimageresource(resids[position]);
imageview.setscaletype(imageview.scaletype.fit_xy);
imageview.setlayoutparams(new gallery.layoutparams(163, 106));
// 設定gallery元件的背景風格
imageview.setbackgroundresource(mgalleryitembackground);
return imageview;
在編寫imageadapter類時應注意的兩點:
1. 在imageadapter類的構造方法中獲得了gallery元件的屬性資訊。這些資訊被定義在res\values\attrs.xml檔案中,代碼如下: