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的代碼,其實很簡單,都有注釋,就不細說了
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);
// 當前滑到的是那一頁就讓第幾個小圓點處于選中狀態(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);
// 默認第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)動效果(標題欄條目多)
- 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 SharedPreferences四種操作模式使用詳解
這篇文章主要介紹了Android SharedPreferences四種操作模式使用詳解的相關(guān)資料,這里介紹了獲取Android SharedPreferences的兩種方法及比較,和操作模式的介紹,需要的朋友可以參考下2017-07-07
Android中捕獲TTextView文本中的鏈接點擊事件方法
這篇文章主要介紹了Android中捕獲TTextView文本中的鏈接點擊事件方法,本文給出了實現(xiàn)代碼和使用方法以及實現(xiàn)自己控制的方法,需要的朋友可以參考下2015-01-01
android TextView設(shè)置中文字體加粗實現(xiàn)方法
android TextView設(shè)置中文字體加粗如何實現(xiàn),接下來介紹實現(xiàn)方法,有需要的朋友可以參考下2013-01-01
Android編程實現(xiàn)使用Intent傳輸包含自定義類的ArrayList示例
這篇文章主要介紹了Android編程實現(xiàn)使用Intent傳輸包含自定義類的ArrayList,涉及Android對象序列化、反序列化、Intent數(shù)據(jù)傳輸?shù)认嚓P(guān)操作技巧,需要的朋友可以參考下2017-08-08
Android Studio和Gradle使用不同位置JDK的問題解決
這篇文章主要介紹了Android Studio和Gradle使用不同位置JDK的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
UiOS開發(fā)中ITextView回收或關(guān)閉鍵盤使用方法總結(jié)
iOS開發(fā)中,發(fā)現(xiàn)UITextView沒有像UITextField中textFieldShouldReturn:這樣的方法,那么要實現(xiàn)UITextView關(guān)閉鍵盤,必須使用其他的方法,下面是可以使用的幾種方法,需要的朋友參考下吧2016-11-11

