1. 程式人生 > >Android學習(二十六)APP引導頁面以及小圓點滑動的實現

Android學習(二十六)APP引導頁面以及小圓點滑動的實現

1、先看效果如下:
這裡寫圖片描述

2、然後實現這個效果大體說明:

1)滑動的頁面,用ViewPager來實現
2)小圓點用LinerLayout裡面新增圖片來實現
3)三個滑動頁面和小圓點都是圖片
4)當滑動到當前頁面的時候,小圓點顯示紅色,其他圓點顯示藍色
5)ViewPager滑動頁面的實現我之前部落格已經寫過了,這次只要是直接把佈局的背景設定成圖片就可以了。

3、然後講一下小圓點
我當前只有一個主佈局檔案,其他三個佈局檔案都是用來適配ViewPager的。
這裡寫圖片描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.gucheng.viwerpagerdemo.MainActivity"
>
<android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <LinearLayout android:id="@+id/dot" android:orientation="horizontal" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerInParent="true" android:layout_marginBottom="15dp">
</LinearLayout> </RelativeLayout>

4、佈局檔案設定好之後,現在在Java類裡面進行實現:
首先,宣告一個ImageView物件陣列的用來存放小圓點,陣列的大小取決於當前ViewPager的大小。
我把小圓點設定函式單獨封裝成了一個類,只需要傳入當前ImageView[],存放小圓點的LinerLayout佈局物件,以及當前上下文就可以完成靜態小圓點的設定(就是說目前為止,滑動頁面小圓點的狀態並沒有改變)。

下面是我封裝的類:

//圓點設定函式
public class SetDot {
    public  SetDot(ImageView[] imageView, LinearLayout dot, Context context){
        for (int i=0; i < imageView.length;i++){
            ImageView imageViewLocal = new ImageView(context);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);

            //控制元件,繫結到這個LinerLayout裡面
            imageViewLocal.setLayoutParams(layoutParams);
            //給空陣列賦值
            imageView[i] = imageViewLocal;
            //預設初始介面為紅色圓點
            if (i == 0){
                imageView[i].setImageResource(R.mipmap.dot_red);
            } else {
                imageView[i].setImageResource(R.mipmap.dot_blue);
            }
            dot.addView(imageViewLocal);
        }
    }
}

5、設定好小圓點之後,現在要做的是實現小圓點狀態和ViewPager同步變化,我也把這個函式封裝成了一個單獨的類:
只需要在例項化的時候傳入ViewPager物件, ImageView[]物件

package com.example.gucheng.viwerpagerdemo;

import android.support.v4.view.ViewPager;
import android.widget.ImageView;

/**
 * Created by gucheng on 2017/7/4.
 */

public class SetDotChangeWithViewPager {
    //建構函式
    public SetDotChangeWithViewPager(){}

    //給ViewPager設定監聽事件,當頁面滑動的時候,小圓點的狀態也跟著改變
    public void dotChangeWithViewPager(ViewPager viewPager, final ImageView[] imageView){
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){

            //頁面正在滑動的時候會呼叫
            @Override
            public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels){
            }

            //頁面改變以後會呼叫
            @Override
            public void onPageSelected(int position){
                for (int i=0;i < imageView.length;i++){
                    if (i == position){//當前頁面小圓點設定為紅色
                        imageView[i].setImageResource(R.mipmap.dot_red);
                    }else {
                        imageView[i].setImageResource(R.mipmap.dot_blue);
                    }
                }
            }

            //頁面狀態改變時被呼叫
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }
}

關於ViewPager的實現就不寫了,主要是小圓點的程式碼,在MainActivity類裡面:
先宣告兩個變數如下

private ImageView[] imageView;
private LinearLayout dot;//小圓點的佈局檔案

然後

//小圓點設定
        dot = (LinearLayout)findViewById(R.id.dot);
        //imageView陣列的大小取決於佈局檔案的大小,就是viewList的大小
        imageView = new ImageView[viewList.size()];
        new SetDot(imageView,dot,MainActivity.this);

其中SetDot是我封裝的第一個函式,寫在開始了。然後

//給viewPager設定監聽事件,讓小圓點跟著頁面變化而滑動
        SetDotChangeWithViewPager setDotChangeWithViewPager = new SetDotChangeWithViewPager();
        setDotChangeWithViewPager.dotChangeWithViewPager(viewPager,imageView);

ok,這樣的話就可以實現開頭gif演示的效果了。

相關推薦

Android學習APP引導頁面以及圓點滑動實現

1、先看效果如下: 2、然後實現這個效果大體說明: 1)滑動的頁面,用ViewPager來實現 2)小圓點用LinerLayout裡面新增圖片來實現 3)三個滑動頁面和小圓點都是圖片 4)當滑動到當前頁面的時候,小圓點顯示紅色,其他圓點顯示藍色 5)

JMeter學習邏輯控制器

Meter中的Logic Controller用於為Test Plan中的節點新增邏輯控制器。 JMeter中的Logic Controller分為兩類:一類用來控制Test Plan執行過程中節點的邏輯執行順序,如:Loop Controller、If Controller等;另一類則與節點邏

Spring 學習——使用XML檔案的方式配置事務

package com.hzyc.spring.jdbc.transaction.xml; /** * @author xuehj2016 * @Title: BookShopDao * @ProjectName Spring * @Description: TODO * @date 2

Python的學習---- 壓縮與解壓縮檔案

Python壓縮與解壓縮檔案 Python能夠直接處理zip檔案中的資料,例如需要將對應目錄或多檔案打包或壓縮成zip格式,或者需要檢視一個zip格式的歸檔檔案中部分或所有的檔案同時避免將這些檔案展開到磁碟上,自1.6版本起,python中zipfile模組以實現相應操作

Linux學習筆記grep

grepgrepgrep [-cinvABC] ‘word‘ filename -c 行數-i 不區分大小寫-n 顯示行號-v 取反-r 遍歷所有子目錄-A 後面跟數字,過濾出符合要求的行以及下面n行-B 同上,過濾出符合要求的行以及上面n行-C 同上,同時過濾出符合要求的行以及上下各n行 mkdir /tm

Linux學習總結防火墻規則之firewalld

firewalld iptables 一iptables 規則備份 service iptables save //會把規則保存到/etc/sysconfig/iptables把iptables規則備份到my.ipt文件中iptables-save > my.ipt恢復剛才備份的規則 iptab

Java學習總計——JavaScript正則表達式,Js表單驗證,原生js+css頁面時鐘

text 先來 helloword 郵箱 用戶名 就是 lac round 外部 一.JavaScript正則表達式1.exec檢索字符串中指定的值,返回找到的值,並確定其位置2.test檢索字符串中指定的值,返回true或false3.正則表達式對象的創建:(1)方式一:

Effective_STL 學習筆記 儘量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator

  每個標準容器類都提供四種迭代器型別,對於container<T>而言: 1 iterator          // 的作用相當於T*, 2 const_iterator       // 相當於 const T*(也可 T const*) 3

Python學習之旅

Python基礎知識(25):常用內建模組 1、datetime:處理日期和時間 (1)獲取當前日期和時間 from datetime import datetime now = datetime.now() print(now) 結果: 2018-12-07 16:05:53.396953

Django學習筆記:閱讀計數和優化計數防重新整理

閱讀計數主要就是記錄網頁被瀏覽的次數,防刷的方法就是記錄瀏覽的cookie,使每個cookie只能增加一次閱讀數, 當然,刪除cookie和關閉瀏覽器就可以重新增加閱讀數,更加優化的方法還在學習中,先分享這個我會的 models.py的程式碼 class Books(m

白的資料結構與演算法學習筆記----廣義表

 一、廣義表的概述 首先回憶一下原子型別和結構型別,簡單說來,原子型別就是不可再分的型別,結構型別就是可以再分的型別。我們前面講的線性表要求每個元素都是原子型別,而廣義表作為線性表的推廣,它的元素可以是原子型別,也可以是個表。元素是原子型別,叫原子結點;元素是表,叫表結點。

【零基礎】Python3學習課後練習題

本文是跟著魚C論壇小甲魚零基礎學習Python3的視訊學習的,課後題也是跟隨每一課所附屬的題目來做的,根據自己的理解和標準答案記錄的筆記。 第二十九課 動動手: 0.編寫一個程式,接受使用

OpenCV學習筆記——小試SVM演算法ml OpenCV學習筆記——基於級聯分類器的目標檢測objdect OpenCV學習筆記——光流法對運動目標跟蹤Video Ope

OpenCV學習筆記(二十六)——小試SVM演算法ml  總感覺自己停留在碼農的初級階段,要想更上一層,就得靜下心來,好好研究一下演算法的東西。OpenCV作為一個計算機視覺的開源庫,肯定不會只停留在數字影象處理的初級階段,我也得加油,深入研究它的演算法庫。就從ml入手

OpenCV學習筆記——小試SVM演算法ml

總感覺自己停留在碼農的初級階段,要想更上一層,就得靜下心來,好好研究一下演算法的東西。OpenCV作為一個計算機視覺的開源庫,肯定不會只停留在數字影象處理的初級階段,我也得加油,深入研究它的演算法庫。就從ml入手吧,最近做東西遇到隨機森林,被搞的頭大,深深感覺自己肚子裡貨太

tensorflow學習筆記:構建TF程式碼

如何構建TF程式碼 batch_size: batch的大小 mini_batch: 將訓練樣本以batch_size分組 epoch_size: 樣本分為幾個min_batch num_epoch : 訓練幾輪 讀程式碼的時候應該關注的幾部分

Android原始碼解析-->截圖事件流程

今天這篇文章我們主要講一下Android系統中的截圖事件處理流程。用過android系統手機的同學應該都知道,一般的android手機按下音量減少鍵和電源按鍵就會觸發截圖事件(國內定製機做個修改的這裡就不做考慮了)。那麼這裡的截圖事件是如何觸發的呢?觸發之後

C++學習總結——RTTI型別檢查,類指標型別轉換

#include<iostream> using namespace std; //rtti實時型別檢測 //成員變數的覆蓋,靜態變數也會覆蓋。 // class A { public:

【轉】JMeter學習使用Jmeter創建ActiveMQ JMS POINT TO POINT請求,環境搭建、請求創建、插件安裝、監聽服務器資源等

分布式 jndi 根目錄 point 啟動 lib .cn 轉載 p2p 最近要做公司消息中間件的性能測試,第一個想到的工具就是Jmeter了,網上簡單搜了一下,基本上都是WEB測試的居多,只好自己研究官方文檔了。 其中涉及Jmeter基本的術語或者概念,請自行參考官方文檔

【轉】JMeter學習Jmeter常見問題

pre 麻煩 continue 而不是 行為 let 方式 prop 右上角 收集工作中JMeter遇到的各種問題 1. JMeter的工作原理是什麽?   向服務器提交請求;從服務器取回請求返回的結果。 2. JMeter的作用?   JMeter可以用於測試

【轉】JMeter學習內存溢出解決方法

不能 -xms 百度 解決 code apache 超過 軟件測試 內存 使用jmeter進行壓力測試時遇到一段時間後報內存溢出outfmenmory錯誤,導致jmeter卡死了,先嘗試在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms2048m