1. 程式人生 > >Android控制元件GridView之仿支付寶錢包首頁帶有分割線的GridView九宮格的完美實現

Android控制元件GridView之仿支付寶錢包首頁帶有分割線的GridView九宮格的完美實現

部落格時間2015-02-04 15:03

今天我們來模仿一下支付寶錢包首頁中帶有分割線的GridView,俗稱九宮格。先上圖,是你想要的效果麼?如果是請繼續往下看。

                                                         

          我們都知道ListView設定分割線是非常容易的,設定ListView的分割線顏色和寬度,只需要在佈局中定義android:dividerandroid:dividerHeight屬性即可。而GridView並沒有這樣的屬性和方法,那我們改如何來做呢?

       博主在做這個效果之前,也參考了其他的一些方案,比如說定義一個自定義的GridView,然後在dispatchDraw()方法中在每個item的四周加上一條分割線,這是需要靠演算法來實現的,最後這種方法實現的效果並不理想,會出現有些item中沒有加上分割線,很難達到我們想要的這種效果。

       其實實現這種效果並不難,原理就是讓每個item都設定成帶有分割線的背景,這樣就很容易實現了。

       首先我們來寫佈局:

  1. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     android:orientation="vertical">
  5.      <ScrollView
  6.         android:layout_width
    ="fill_parent"
  7.         android:layout_height="wrap_content"
  8.         android:fillViewport="true"
  9.         android:scrollbars="none">
  10.         <com.finddreams.alipay.MyGridView
  11.             android:id="@+id/gridview"
  12.             android:layout_width="fill_parent"
  13.             android:layout_height="wrap_content"
  14.             android:horizontalSpacing="0.0dip"
  15.             android:listSelector="@null"
  16.             android:numColumns="3"
  17.             android:scrollbars="none"
  18.             android:stretchMode="columnWidth"
  19.             android:verticalSpacing="0.0dip"/>
  20.     </ScrollView>
  21. </LinearLayout>

       因為有時候我們的Gridview中的item可能比較多,為了放得下,一般都會用一個ScrollView來巢狀起來。這時就會出現一個常見的問題,我們在開發中經常會碰到,就是當ListView或者GridView被巢狀在ScrollView中時,發現只會顯示第一行的資料,後面的資料就不會顯示了。至於產生這個問題的原因,可能是因為Gridview和ListView都是可以根據子item的寬高來顯示大小的,但是一旦巢狀到ScrollView中就可以上下滑動,於是系統就不能確定到底該畫多大,所以才會產生這樣的問題。

      這個問題的解決方法在網上很多,一般百度一下就能查到,下面是GridView的解決方法:

  1. publicclass MyGridView extends GridView {  
  2.     public MyGridView(Context context, AttributeSet attrs) {  
  3.         super(context, attrs);  
  4.     }  
  5.     public MyGridView(Context context) {  
  6.         super(context);  
  7.     }  
  8.     public MyGridView(Context context, AttributeSet attrs, int defStyle) {  
  9.         super(context, attrs, defStyle);  
  10.     }  
  11.     @Override
  12.     publicvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  13.         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
  14.                 MeasureSpec.AT_MOST);  
  15.         super.onMeasure(widthMeasureSpec, expandSpec);  
  16.     }  
  17. }  

      接下來,我們就定義一個帶分割線的選擇器,具體程式碼是:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <selectorxmlns:android="http://schemas.android.com/apk/res/android">
  3.     <itemandroid:state_pressed="true"><shapeandroid:shape="rectangle">
  4.             <strokeandroid:width="1.0px"android:color="@color/line"/>
  5.             <gradientandroid:angle="270.0"android:endColor="#ffe8ecef"android:startColor="#ffe8ecef"/>
  6.         </shape></item>
  7.     <itemandroid:state_focused="true"><shapeandroid:shape="rectangle">
  8.             <gradientandroid:angle="270.0"android:endColor="#ffe8ecef"android:startColor="#ffe8ecef"/>
  9.             <strokeandroid:width="1.0px"android:color="@color/line"/>
  10.         </shape></item>
  11.     <item><shapeandroid:shape="rectangle">
  12.             <gradientandroid:angle="270.0"android:endColor="#ffffffff"android:startColor="#ffffffff"/>
  13.             <strokeandroid:width="1.0px"android:color="@color/line"/>
  14.         </shape></item>
  15. </selector>

         定義一個selector,在裡面設定一個形狀為矩形rectangle,設定這個矩形的stroke描邊屬性的顏色為分割線的顏色,然後在不同的state的item中設定不同的gradient漸變屬性,從而實現在單個item在被點選選中時的效果。

        接著就是給我們GridView的item佈局中加上背景了:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="fill_parent"
  4.     android:layout_height="fill_parent"
  5.     android:layout_margin="0.0dip"
  6.     android:background="@color/griditems_bg">
  7.     <RelativeLayout
  8.         android:layout_width="fill_parent"
  9.         android:layout_height="fill_parent"
  10.         android:layout_centerInParent="true"
  11.         android:background="@drawable/bg_gv"
  12.         android:padding="12.0dip">
  13.         <ImageView
  14.             android:id="@+id/iv_item"
  15.             android:layout_width="58.0dip"
  16.             android:layout_height="58.0dip"
  17.             android:layout_centerHorizontal="true"
  18.             android:contentDescription="@string/app_name"/>
  19.         <TextView
  20.             android:id="@+id/tv_item"
  21.             android:layout_width="wrap_content"
  22.             android:layout_height="wrap_content"
  23.             android:layout_below="@id/iv_item"
  24.             android:layout_centerHorizontal="true"
  25.             android:layout_marginTop="5.0dip"
  26.             android:maxLines="1"
  27.             android:textColor="@color/commo_text_color"
  28.             android:textSize="14.0sp"/>
  29.     </RelativeLayout>
  30. </RelativeLayout>


      到這裡,就要開始寫程式碼了,定義一個Adapter,把資料填充到GridView中,這一步我想大家都應該都很清楚,這裡就不多講了,不懂的話,可以參考下面的專案程式碼。

相關推薦

Android控制元件GridView仿支付錢包帶有割線GridView九宮完美實現

部落格時間:2015-02-04 15:03 今天我們來模仿一下支付寶錢包首頁中帶有分割線的GridView,俗稱九宮格。先上圖,是你想要的效果麼?如果是請繼續往下看。                                               

仿支付錢包帶有割線GridView九宮完美實現

我們來模仿一下支付寶錢包首頁中帶有分割線的GridView,俗稱九宮格。先上圖,是你想要的效果麼?如果是請繼續往下看。 我們都知道ListView設定分割線是非常容易的,設定ListView的分割線顏色和寬度,只需要在佈局中定義android:divide

Android自定義控制元件仿網易星球浮動小球

仿網易星球浮動小球 讀唄開發過程中遇到新需求,類似於網易星球收集黑鑽的介面,考慮到可能也有人會使用,索性封裝成庫,後面好移植使用 先看看需要實現的效果: 需求分析: 資料集合可能是int、double、float等型別 小球位置隨機 沒有資料時

android軟件開發仿選擇規格的實現

per con attribute back view.gone boolean 做了 over ear 在一些app開發項目中選擇商品規格這個功能最容易遇到問題,想要實現需要的全部功能,但一直沒有成功,所以就去找了個Demo,學習界面UI采用recyclerview,it

Android 掛逼 修煉行---支付螞蟻森林能量自動收取外掛開發原理解析

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android控制元件TextView跑馬燈功能問題記錄

轉載自:https://www.cnblogs.com/jesn/p/4298249.html 在使用TextView練習跑馬燈時出現了以下問題: 為控制元件設定了以下屬性  <!--啟用焦點--> android:focusable="true" <!--單行顯示

一步一步學android控制元件十四) —— NumberPicker

NumberPicker 是用於選擇一組預定義好數字的控制元件。比如時間hour的選擇只有0—23有效,則可以通過setMinValue和setMaxValue設定。 使用該控制元件時需注意他的兩個listener和一個formatter:一個listener用於監聽當前v

Android控制元件系列RadioButton與RadioGroup的基本使用

RadioButton即單選框,是一種基礎的UI控制元件。RadioGroup為我們提供了RadioButton單選按鈕的容器,RadioButton通常放於RadioGroup容器中進行使用。RadioButton的選中狀態,在xml檔案中可以使用android:chec

仿支付錢包:帶割線GridView

需求: 本文記錄了我嘗試實現支付寶錢包樣式帶分割線GridView的過程。首先看一下高大上的支付寶錢包首頁:                                                                                  

Android開發仿商品詳情

看到有人在問如何實現淘寶商品詳情頁效果,手癢了就擼了一個,獻上效果圖 大致梳理一下思路,這裡不提供原始碼 狀態列透明使用開源庫StatusBarCompat,為了相容手機4.4 dependencies { compile ('com.

Android 仿支付搜尋結果,字串部分文字顯示高亮

最近收到一個需求就是,搜尋的關鍵詞,在搜尋結果頁的搜尋條目上高亮顯示。類似於支付寶搜尋結果頁的效果。 先來看一下效果如下圖: 經過一番思慮之後,感覺還是比較簡單的,直接上程式碼 /** * 字串高亮顯示部分文字 * @param textView

Android控制元件系列RadioButton&RadioGroup

學習目的: 1、掌握在Android中如何建立RadioGroup和RadioButton 2、掌握RadioGroup的常用屬性 3、理解RadioButton和CheckBox的區別 4、掌握RadioGroup選中狀態變換的事件(監聽器) RadioButton和CheckBox的區別:

Android控制元件開發Gallery3D酷炫效果 瀏覽圖片

效果網上已經很多人做出來了,只是這次需要用到,所以自己也實踐了一下(這裡例子我也是根據網上一些資料編寫)。特下面針對一些關鍵程式碼進行簡要說明,需要做這方面東西的朋友可以看看。這篇文章是實用性文章,理論分析不多。

Android學習筆記-自定義仿支付ProgressBar動畫

最近開始學習自定義控制元件,看到支付寶支付的ProgressBar動畫感覺不錯,就學著也做一個這樣的ProgressBar。 首先看效果圖 原理:  一個執行緒無限改變進度畫弧形,當外部告知結束,通過判斷結果呈現成功或者失敗動畫,通過path座標緩慢變化就可以實現動畫效

仿商品詳情[帶有視訊和圖片的輪播功能]

因為工作需求的原因,自己寫了一個demo,既實現了功能,又能與大家分享,很高興!Demo已上傳GitHub,https://github.com/xinniangdeweidao/CloneTaobaoProductsDetails.git 轉載請註明出處,謝謝!

60秒Dapp快訊 |DappRadar創始人:EOS上出塊數量已超過200萬;支付錢包個區塊鏈跨境匯款香港上線

本文由微信公眾號DappVision原創首發,轉載請聯絡授權哈嘍,大家晚上好!今天是 6月25日 星期一 北京時間22:00。歡迎來到60秒Dapp資訊,DappVision帶你瞭解全球最熱、最新的Dapp要聞。晚間行情BTC 現價 ¥40,784.15  漲跌幅  5.10

仿各大商城---使用型別的RecyclerView來實現

**正所謂,一入商城深似海~ 商城類的App,確實是有許多東西值得學習,但是隻要略微斟酌一下,你又會發現,它們之間存在著許多不謀而合的相似,也就是所謂的雷同~既然如此,讓我們也來接下地氣,先從一個簡單的首頁做起吧~** 源部落格http://blog.csdn.net/cjm

仿美團錢包CollapsingToolbarLayout監聽滑動隱藏效果(公司專案)

先看下效果圖 我們先看下佈局檔案: <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="h

Android自定義控制元件開發系列(三)——仿支付六位支付密碼輸入頁面

        在移動互聯領域,有那麼幾家龍頭一直是我等學習和追求的目標,比如支付寶、微信、餓了麼、酷狗音樂等等,大神舉不勝舉,他們設計的介面、互動方式已經培養了中國(有可能會是世界)民眾的操作習慣:舉個小例子,對話方塊“確定”按鈕的左右位置就很有學問,如果大家都是左邊取消

仿支付快遞資訊控制元件

程式碼地址:https://github.com/ky48302430/myflowstatess        效果圖        Xml 佈局 <declare-styl