Android動態(tài)給ViewPager添加Indicator導(dǎo)航
先看下效果

小圓點的形狀和顏色都是可以自己定義的,看需求
首先第一步,滑2個圓點,一個是選中后的圓點,一個是未選中的圓點,看選中的圓點shape
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@color/colorPrimary"/> </shape>
未選中的
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@color/colorAccent"/> </shape>
是不是很簡單,就指定一個圓形,一個顏色
接下來就是定義一個selector,用來控制選中和非選中
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/indicator_checked_shape" android:state_enabled="true"/> <item android:drawable="@drawable/indicator_unchecked_shape" android:state_enabled="false"/> </selector>
然后就是mainActivity的布局文件,放置一個ViewPager,下面放置一個LinearLayout,用來裝小圓點
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.duanlian.viewpagerindicatordemo.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="170dp"
/>
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_below="@+id/viewpager"
android:layout_marginTop="-40dp"
android:gravity="center"
android:orientation="horizontal"></LinearLayout>
</RelativeLayout>
接下來就是MainActivity的代碼,其實很簡單,都有注釋,就不細(xì)說了
package com.duanlian.viewpagerindicatordemo;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private LinearLayout mLinear;
private List<ImageView> mList;
private PagerAdapter mPagerAdapter;
private int[] imageArray = {R.mipmap.banner1, R.mipmap.banner2, R.mipmap.banner3, R.mipmap.ic_launcher};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initPoint();
}
private void initView() {
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mLinear = (LinearLayout) findViewById(R.id.linear);
//給ViewPager添加圖片顯示
mList = new ArrayList<>();
for (int i = 0; i < imageArray.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(imageArray[i]);
mList.add(imageView);
}
mPagerAdapter = new PagerAdapter(mList);
mViewPager.setAdapter(mPagerAdapter);
//ViewPager切換的監(jiān)聽事件
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
position = position % mList.size();// 需要對position的值進行重新賦值,否則會造成數(shù)組越界
// 更新小圓點的顯示
for (int i = 0; i < mList.size(); i++) {
ImageView iv = (ImageView) mLinear.getChildAt(i);
// 當(dāng)前滑到的是那一頁就讓第幾個小圓點處于選中狀態(tài)
if (position == i) {
iv.setEnabled(true);
} else {
iv.setEnabled(false);
}
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
/**
* 初始化指示器
*/
private void initPoint() {
for (int i = 0; i < mList.size(); i++) {
// 往llContainer添加一個小圓點
ImageView iv = new ImageView(this);
//設(shè)置背景
iv.setImageResource(R.drawable.indicator_viewpager_selector);
//設(shè)置原點大小
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30, 30);
//如果是切好的圖片就直接自適應(yīng)
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
iv.setLayoutParams(params);
// 默認(rèn)第0個小圓點顯示紅色
if (i == 0) {
iv.setEnabled(true);
} else {
iv.setEnabled(false);
}
//設(shè)置原點之間的間距
iv.setPadding(5, 5, 5, 5);
//添加到LinearLayout中
mLinear.addView(iv);
}
}
}
最后附上ViewPager的adapter
package com.duanlian.viewpagerindicatordemo;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.List;
/**
* viewPager的adapter
*/
public class PagerAdapter extends android.support.v4.view.PagerAdapter{
private List<ImageView> list;
public PagerAdapter(List<ImageView> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));//添加頁卡
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));//刪除頁卡
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android使用ViewPager實現(xiàn)導(dǎo)航
- Android中TabLayout+ViewPager 簡單實現(xiàn)app底部Tab導(dǎo)航欄
- Android自定義ViewPagerIndicator實現(xiàn)炫酷導(dǎo)航欄指示器(ViewPager+Fragment)
- Android 利用ViewPager+GridView實現(xiàn)首頁導(dǎo)航欄布局分頁效果
- Android 中 TabHost與ViewPager結(jié)合實現(xiàn)首頁導(dǎo)航效果
- ViewPager頂部導(dǎo)航欄聯(lián)動效果(標(biāo)題欄條目多)
- Android 開發(fā)之BottomBar+ViewPager+Fragment實現(xiàn)炫酷的底部導(dǎo)航效果
- Android ViewPager制作新手導(dǎo)航頁(動態(tài)加載)
- Android ViewPager導(dǎo)航小圓點實現(xiàn)無限循環(huán)效果
相關(guān)文章
詳解Android使用OKHttp3實現(xiàn)下載(斷點續(xù)傳、顯示進度)
本篇文章主要介紹了詳解Android使用OKHttp3實現(xiàn)下載(斷點續(xù)傳、顯示進度),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解
這篇文章主要介紹了Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
Android實現(xiàn)開機自動啟動Service或app的方法
這篇文章主要介紹了Android實現(xiàn)開機自動啟動Service或app的方法,結(jié)合實例形式分析了Android開機自啟動程序的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-07-07
Android 7.0以上版本實現(xiàn)應(yīng)用內(nèi)語言切換的方法
本篇文章主要介紹了Android 7.0以上版本實現(xiàn)應(yīng)用內(nèi)語言切換的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
詳解android在mob平臺實現(xiàn)qq登陸和分享
這篇文章主要介紹了詳解android在mob平臺實現(xiàn)qq登陸和分享,對接入第三方平臺SDK感興趣的同學(xué)們,可以參考下2021-04-04
Android使用OKHttp包處理HTTP相關(guān)操作的基本用法講解
這篇文章主要介紹了Android使用OKHttp包處理HTTP相關(guān)操作的基本用法講解,包括操作如何利用OKHttp操作HTTP請求與處理緩存等內(nèi)容,需要的朋友可以參考下2016-07-07
Android實現(xiàn)沉浸式導(dǎo)航欄實例代碼
通過本文給大家分享android實現(xiàn)沉浸式導(dǎo)航欄實例代碼,代碼非常實用,需要的朋友可以參考下2016-05-05

