Android開發——Viewpager的介紹使用

来源:https://www.cnblogs.com/kexing/archive/2018/02/09/8400929.html
-Advertisement-
Play Games

目錄: 一、Viewpager的簡單介紹 二、簡單的Viewpager使用 三、簡單顯示圖片的Viewpager實現 四、廣告圖的實現及Viewpager指示器(小圓點)的實現 五、APP引導頁的實現 一、ViewPager介紹 官方文檔解釋: Layout manager that allows ...


目錄:

一、Viewpager的簡單介紹

二、簡單的Viewpager使用

三、簡單顯示圖片的Viewpager實現

四、廣告圖的實現及Viewpager指示器(小圓點)的實現

五、APP引導頁的實現

一、ViewPager介紹

官方文檔解釋:

Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows.
ViewPager is most often used in conjunction with android.app.Fragment, which is a convenient way to supply and manage the lifecycle of each page. There are standard adapters implemented for using fragments with the ViewPager, which cover the most common use cases. These are android.support.v4.app.FragmentPagerAdapter and android.support.v4.app.FragmentStatePagerAdapter; each of these classes have simple code showing how to build a full user interface with them.
Views which are annotated with the ViewPager.DecorView annotation are treated as part of the view pagers 'decor'. Each decor view's position can be controlled via its android:layout_gravity attribute. For example:
   <android.support.v4.view.ViewPager
       android:layout_width="match_parent"
       android:layout_height="match_parent">
 
       <android.support.v4.view.PagerTitleStrip
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_gravity="top" />
 
   </android.support.v4.view.ViewPager>
   
For more information about how to use ViewPager, read Creating Swipe Views with Tabs.
You can find examples of using ViewPager in the API 4+ Support Demos and API 13+ Support Demos sample code.

大概的意思為:

  • 佈局管理器允許左右翻轉帶數據的頁面,你想要顯示的視圖可以通過實現PagerAdapter來顯示。這個類其實是在早期設計和開發的,它的API在後面的更新之中可能會被改變,當它們在新版本之中編譯的時候可能還會改變源碼。

  • ViewPager經常用來連接Fragment,它很方便管理每個頁面的生命周期,使用ViewPager管理Fragment是標準的適配器實現。最常用的實現一般有FragmentPagerAdapter和FragmentStatePagerAdapter。

  • FragmentPagerAdapter和FragmentStatePagerAdapter是ViewPager和Fragment一起使用時才會用到,後面會詳細介紹,這裡就不介紹了

二、簡單的ViewPager使用

使用方法其實與Listview和RecyclerView的方法類似

1.佈局文件使用Viewpager

2.定義一個適配器類使其繼承PagerAdapter,覆寫其中的四個方法,分別是getCount,isViewFromObject,instantiateItem和destroyItem

  @Override
    public int getCount() {
        return 3;//在Viewpager顯示3個頁面
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        TextView tv = new TextView(container.getContext());
        tv.setGravity(Gravity.CENTER);
        tv.setTextSize(20);
        tv.setText("第" + position + "頁");

        // 添加到ViewPager容器
        container.addView(tv);

        // 返回填充的View對象
        return tv;


    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      
        container.removeView((View) object);
    }

 

3.findviewbyid方法找到viewpager

4.設置適配器

效果圖:

 

三、簡單顯示圖片的Viewpager實現

1.佈局中使用viewpager

 

2.定義一個適配器類使其繼承PagerAdapter,覆寫其中的四個方法,分別是getCount,isViewFromObject,instantiateItem和destroyItem

 private int [] mImage;

    public AdvertiseViewpagerAdapter(int[] mImage) {
        this.mImage = mImage;//接收傳入的mIamge
    }

    @Override
    public int getCount() {
        return 3;//在Viewpager顯示3個頁面
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }
    //設置每一頁顯示的內容
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = new ImageView(container.getContext());
        imageView.setImageResource(mImage[position]);//ImageView設置圖片
        container.addView(imageView); // 添加到ViewPager容器
        return imageView;// 返回填充的View對象
    }
    // 銷毀條目對象
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

 

這裡註意看紅色的代碼,我們在適配類中定義了一個成員變數,用來接收參數傳入的圖片資源id,之後在instantiateItem方法中,new一個ImageView,將其的圖片設置為數組中存放的圖片資源id,其他的代碼與之前一樣,這裡就不多解釋了

3.在activity文件中聲明一個整型數組,將圖片資源id存放進去

4.new一個適配器,將整型數組傳入

5.findviewbyid找到viewpager,為其設置適配器

 

效果圖:

四、廣告圖的實現及Viewpager指示器(小圓點)的實現

 本來開始寫的時候,我還是用的別人的庫來實現小圓點功能,之後,研究了一下,發現實現其實很簡單,想要瞭解的同學可以看我這一篇Android開發——打造簡單的Viewpager指示器(小圓點指示器)

今天寫的就是拿別人的來使用

項目名稱CircleIndicator,github

第一步,添加依賴

 

第二步,在xml中使用

 

第三步,為circleIndicator綁定viewpager

 

 

 效果圖:

    顏色有些白,可能看得不太清楚。。

 

 

PS:可以通過自定義屬性修改顏色,不過,修改顏色就變成了正方形了,不太懂是怎麼回事

 

 五、APP引導頁的實現

首先,我們理解一下引導頁的邏輯

這裡有個問題,如何才能判斷是否是第一次進入APP呢?其實很簡單,使用 SharedPreferences,這裡我不多說了

我這一篇有用到SharedPreferences,可以參考參考Android開發模板代碼(二)——為ImageView設置圖片,退出後能保存ImageView的狀態

 

1.在xml中使用viewpager

這裡我們還可以加上一個圓形指示器,這樣比較好看,市場上的大部分APP都是有個圓形指示器的嘛,我們也隨主流

這裡我們可以使用之前的那個開源庫CircleIndicator,如果你是想實現移動的小圓點指示器,打一波廣告,推薦使用開源庫CIrclePointMove

這個開源庫是我用兩天寫出來的,簡單設置之後就能實現小圓點移動的功能

提示:

使用RelativeLayout,可以使得小圓點指示器顯示在Viewpager上方

layout_above 該控制項顯示在fragmentViewpager的上方

layout_alignParentBottom 該控制項是否貼近父佈局的底部

 

2.定義個適配類,這裡我們使用viewpager裝載fragment

我這裡用了兩個Fragment,一個fragment顯示第一頁,來一個顯示第二頁

代碼與之前類似,相信大家也是看到明白,不過,這裡提一下,ViewPager的FragmentAdapter有兩種,一種是FragmentPagerAdapter,另外一種則是FragmentPageStateAdapter,這兩種的區別在於,前者在換到其他頁時不會銷毀之前的頁面內容,適合頁面不多的情況使用,後者則是換到其他頁會將之前的頁面給銷毀,返回到之前的頁面就是重新載入,適合頁面過多的情況使用

3.為Viewpager設置adapter

4.使用CirclePointMove實現小圓點跟隨viewpager移動

 

 5.效果圖

 

 PS:我這裡只是簡單地演示了Fragment,你也可以使用我上面的提示,在下麵加個按鈕實現下一頁,需要使用到Viewpager的setCurrentItem方法,參數為position,還有跳過功能,直接顯示出主界面

 Demo

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL 組複製實現了基於複製協議的多主更新(單主模式)。 複製組由多個 server成員構成,並且組中的每個 server 成員可以獨立地執行事務。但所有讀寫(RW)事務只有在衝突檢測成功後才會提交。只讀(RO)事務不需要在衝突檢測,可以立即提交。 對於任何 RW 事務,提交操作並不是由始發 s ...
  • 結構語言分類 DDL(數據定義語言) create drop alter 創建刪除以及修改資料庫,表,存儲過程,觸發器,索引.... DML(數據操作語言) insert delete update 用來操作資料庫中的數據 DQL(數據查詢語言) select 用來查詢資料庫中的數據 DCL(數據控 ...
  • 背景 原文地址(http://www.cnblogs.com/wenBlog/p/8435229.html) 最近針對我們的處理器出現了一系列的嚴重的bug。這種bug導致了兩個情況,就是熔斷和幽靈。 這就是這幾天鬧得人心惶惶的CPU大Bug。消息顯示,以英特爾處理器為代表的現代CPU中,存在可以導 ...
  • http://dcx.sybase.com/1101/en/dbprogramming_en11/ianywhere-data-sqlanywhere-saconnection-getschem6330755502-0.html http://razorsql.com/articles/sybase ...
  • 一、概述 mongodb是最接近關係型資料庫的NOSQL資料庫,它的存儲方式非常的靈活;以至於你會將它看成是一個經過冗餘過的關係型資料庫的表,這也是Mongodb原子性的一個特征。由於沒有關係型資料庫的表之間的關聯關係和事務性所以Mongodb插入和更新的效率非常的高,同時也支持索引。我們在查詢的時 ...
  • ViewPager中切換界面Fragment被銷毀的問題分析 使用ViewPager+Fragment實現界面切換,當界面數量大於3時,出現二次滑動後數據消失的情況,下麵由Fragment生命周期進行分析 簡單解析: 使用pager=3進行測試,當界面由2切換到1的時候,3界面對應的Fragment ...
  • 今天同事誤上傳一個庫,然後又刪除了。。。 我剛好把他上傳的庫給down下來了。。。然後項目一直報錯,clean。。。重新編譯。。。刪build文件。。。。全都不管用 好幾個人研究了好久,只能猜測是緩存問題。。。把項目的緩存全刪了沒用。。。。那應該是gradle緩存的問題。。。 可以我電腦上的grad ...
  • There may be a situation, when you need to execute a block of code several number of times. In general, statements are executed sequentially: The firs ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...