Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> ListView懸浮頭部展現效果

ListView懸浮頭部展現效果

編輯:關於Android編程

先看下效果:需求是 滑動列表 ,其中一部分視圖(粉絲數,關注數這一部分)在滑動到頂端的時候不消失,而是停留在整個界面頭部。

\

 

我們先分析要解決的問題:

1、如何實現列表ListView頂部視圖跟隨ListView一起滑動

2、如何實現滑動過程中需要停留在頂部的視圖

 

解決:

第一個問題,實現ListView與頂部視圖一起滑動,ListView提供一個方法,addHeadView(View); 意思就是在ListView頂部添加一個View。那麼這個View就能和ListView一起滾動。

第二個問題,怎麼保證界面中間的某一部分視圖滑動到頂部的時候停留在頂部呢?

首先我們這個停留在頂部的View(稱為View1)是ListView.addHeadView()上去的,即滑動列表,這個View1會劃出去,那麼如何讓它不劃出去?只要在Listview所在布局最上方

也寫一個同樣的View(稱為View2,View2和ListView同屬於一個FragmentLayout)並先隱藏(Visible = 'gone'),當View1剛劃出頂部的時候,View2顯示。

View1剛劃出頂部的時機就是:

當滑動時 firstVisibleItem>=要懸浮的 item的position時 讓View2顯示 ,否則隱藏。

 

代碼實現:

首先布局文件:

頭部布局:

 1 
 2 
 8     
14 

要停留在頂部的View布局:(這裡是要停留在頂部的View,這裡addHeadView到ListView頂部,跟隨者ListView滑動到頂部消失,這時滿足firstVisibleItem>=要懸浮的 item的position條件,主界面裡在寫一個相同的View顯示即可)



        

主布局:



    

    <framelayout android:layout_height="wrap_content" android:layout_width="match_parent">

        

        

            
        
    </framelayout>


java代碼:

 1 private LinearLayout invis;
 2     private ListView lv;
 3     String[] strs;
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_main);
 8 
 9         invis = (LinearLayout) findViewById(R.id.invis);
10 
11         strs = new String[100];
12 
13         for (int i = 0; i < 20; i++) {
14             strs[i] = "data-----" + i;
15         }
16 
17         lv = (ListView) findViewById(R.id.lv);
18         View header = View.inflate(this, R.layout.stick_header, null);//頭部內容
19         lv.addHeaderView(header);//添加頭部
20 
21         lv.addHeaderView(View.inflate(this, R.layout.stick_action, null));//ListView條目中的懸浮部分 添加到頭部
22 
23         lv.setAdapter(new ArrayAdapter(this,
24                 android.R.layout.simple_list_item_1, strs));
25         lv.setOnScrollListener(new AbsListView.OnScrollListener() {
26 
27             @Override
28             public void onScrollStateChanged(AbsListView view, int scrollState) {
29 
30             }
31 
32             @Override
33             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
34                 if (firstVisibleItem >= 1) {
35                     invis.setVisibility(View.VISIBLE);
36                 } else {
37 
38                     invis.setVisibility(View.GONE);
39                 }
40             }
41         });
42 
43     }

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved