我的家園

          我的家園

          Gallery 是Android官方提供的一個View容器類,繼承于AbsSpinner類,用于實現頁面滑動效果。


          從上面的繼承關系可以看出,AbsSpinner類繼承自AdapterView,因此我們可以自定義實現Adapter,來填充Gallery容器的數據。


          本示例通過自己實現一個Adapter,來填充Gallery容器的圖片數據,首先看效果:




          Activity

           


          ImageAdapter.java

           

           


          main.xml

           


          源碼下載


           

          示例分析:

          1、ImageAdapter中,是繼承BaseAdapter自定義實現的,重載了BaseAdapter的幾個虛方法,其中重要的有兩個

          getCount() : 返回資源的大小(總長度)

          getView(int position, View convertView, ViewGroup parent) : 返回當前顯示的資源(獲取焦點)

          2、GalleryActivity中,通過gallery.setAdapter(imgAdapter); 設置資源,然后設置gallery的點擊監聽事件。

          3、main.xml中,是布局文件,顯示一個TextView和Gallery,RelativeLayout是相對布局

          總體來說,Gallery 上述的示例很簡單,結構比較清晰,能夠滿足基本的應用。



          Gallery 高級應用

          上面的示例,僅僅是最簡單的Gallery應用,如果我們想做的更酷、更炫的效果:

          1、Gallery 圖片顯示能夠循環播放,即向右滑到左側第一張圖片后,需要接著顯示最后一張圖片;向左滑到最后一張圖片后,需要接著顯示第一張圖片,往復不間斷顯示的循環效果。

          2、選中圖片高亮,未選中圖片陰影,更加突出當前獲取焦點的選中圖片

          3、區分“點擊”與“選中”圖片事件的區別和適用場景



          效果1 —— 高亮顯示

          沒有選中,在GalleryActivity中,設置gallery.setUnselectedAlpha(0.3f); 透明度為0.3

          選中,在ImageAdapter的getView(int position, View convertView, ViewGroup parent)中,設置imageview.setBackgroundColor(Color.alpha(1)); 背景色為1


          效果2 —— 循環播放

          原理:Gallery循環播放的原理,跟循環鏈表的思想一樣,首尾item連接都是通過“取余”實現

          修改1、ImageAdapter中的getCount() 方法中,修改返回值為無窮大 return Integer.MAX_VALUE;

          修改2、ImageAdapter中的getView(int position, View convertView, ViewGroup parent)方法中,設置imageview.setImageResource(imgs[position % imgs.length]); 取余

          修改3、GalleryActivity中,設置gallery.setSelection(imgAdapter.imgs.length * 100); 使gallery顯示圖片的位置從中間開始顯示(即imgAdapter.imgs.length * 100)

          修改解釋:

          修改1,主要是為了是循環接近無限往復循環,使position無限大,循環在實踐應用上不容易結束(理論上會結束,即2^31-1約20億次循環后)

          修改2,通過取余,使圖片能夠重復利用并顯示

          修改3,由于起始位置如果是0,則向右滑動左側將無法循環(此時左側將為-1,超出了imgs[]數組的下邊界),因此開始應設置起始位置為imgAdapter.imgs.length的整數倍

           


          效果3 —— “點擊”和“選中”事件

          1、點擊事件OnItemClickListener,是需要用手點擊才觸發,滑動時不觸發

          2、選中事件OnItemSelectedListener,是當圖片滑到屏幕正中,則視為自動選中,在滑動的過程中會觸發

          適用場景:

          1、點擊事件OnItemClickListener,是在確定要選中該項時,才點擊進行邏輯處理

          2、選中事件OnItemSelectedListener,可以用來提醒用戶,當前獲取焦點的項,如果確認為該項則需要點擊OnItemClickListener后,進行下一步的邏輯處理


          高級應用完整代碼:


          Activity

           

           



          ImageAdapter.java

           


          源碼下載



          參考推薦:

          Gallery

          Gallery tutorial


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 锦屏县| 青河县| 巴林左旗| 宣威市| 惠州市| 武强县| 宁明县| 乐山市| 军事| 东海县| 长泰县| 米易县| 嘉善县| 河池市| 广元市| 漯河市| 措美县| 盐池县| 辽宁省| 禄劝| 邳州市| 黄大仙区| 贡山| 封开县| 高邮市| 四子王旗| 乡宁县| 额敏县| 高州市| 长岛县| 中江县| 当涂县| 南郑县| 阿拉善盟| 宝兴县| 和平区| 禹州市| 自治县| 太原市| 清河县| 南和县|