Viewpager + 小点点导航的具体实现

Viewpager来实现广告展示效果肯定是不错的,配上小点点的分页导航肯定是标配,那么现在就来说一说具体是怎么样来实现的呢?

我们先看看效果图:

写完成之后觉得是非常简单的,实现的方式肯定也有很多种,那么我使用的其实是viewpager + viewgroup + view即可。Viewpager负责广告滑动,而viewgroup+ view则是负责下面的小点点导航。

一、首先看他的布局文件

我们先看看布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:ignore="UselessParent" ><android.support.v4.view.ViewPagerandroid:id="@+id/guidePages"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/scrollview" /><LinearLayoutandroid:id="@+id/viewGroup"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:gravity="center_horizontal"android:orientation="horizontal"android:layout_marginBottom="5dp"></LinearLayout></RelativeLayout>

布局简单,是一个viewpager + viewgroup。然后我们在源码中将具体的view添加到viewgroup中去,这就实现了小点点的数媒与viewpager一致,并能在viewpager中fragment动态改变的时候也能自动改变。增强可拓展性!

在源码中不仅添加小点点,也为viewpager的滑动增加小点点的背景改变,也就是导航。当然如果想在小点点中做点击事件也是同样可以的,考虑一下焦点获取的问题就ok了。

二、参考源码

在源码中,我们可以参考如下代码:

public classMainActivity extends Activity {private ViewPager viewPager;private ArrayList<View> pageViews;private ImageView imageView;private ImageView[] imageViews;// 包裹滑动图片LinearLayoutprivate ViewGroup main;// 包裹小圆点的LinearLayoutprivate ViewGroup group;@SuppressWarnings("unused")privateArrayAdapter<View> pp;@Overridepublic void onCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.pager_layout);int[] img = new int[] { R.drawable.no1, R.drawable.no2, R.drawable.no3,R.drawable.no4, R.drawable.no5 };pageViews = newArrayList<View>();for (int i = 0; i < img.length; i++) {LinearLayoutlayout = newLinearLayout(this);LayoutParamsltp = newLayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);final ImageView imageView = new ImageView(this);imageView.setScaleType(ScaleType.CENTER_INSIDE);imageView.setImageResource(img[i]);layout.addView(imageView,ltp);pageViews.add(layout);}group = (ViewGroup)findViewById(R.id.viewGroup);viewPager = (ViewPager)findViewById(R.id.guidePages);/*** 有几张图片下面就显示几个小圆点*/imageViews = new ImageView[pageViews.size()];LinearLayout.LayoutParamsmargin = newLinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);// 设置每个小圆点距离左边的间距margin.setMargins(10,0, 0, 0);for (int i = 0; i < pageViews.size(); i++) {imageView = new ImageView(MainActivity.this);// 设置每个小圆点的宽高imageView.setLayoutParams(new LayoutParams(15, 15));imageViews[i] = imageView;if (i == 0) {// 默认选中第一张图片imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);}else{// 其他图片都设置未选中状态imageViews[i].setBackgroundResource(R.drawable.page_indicator_unfocused);}group.addView(imageViews[i], margin);}// 给viewpager设置适配器viewPager.setAdapter(new GuidePageAdapter());// 给viewpager设置监听事件viewPager.setOnPageChangeListener(newGuidePageChangeListener());}// 指引页面数据适配器class GuidePageAdapter extends PagerAdapter {@Overridepublic int getCount() {return pageViews.size();}@Overridepublic boolean isViewFromObject(Viewarg0, Object arg1) {return arg0 == arg1;}@Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {// TODO Auto-generated method stub((ViewPager)arg0).removeView(pageViews.get(arg1));}@Overridepublic ObjectinstantiateItem(View arg0, int arg1) {// TODO Auto-generated method stub((ViewPager)arg0).addView(pageViews.get(arg1));return pageViews.get(arg1);}}// 指引页面更改事件监听器class GuidePageChangeListenerimplementsOnPageChangeListener {@Overridepublic voidonPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageSelected(int arg0) {// 遍历数组让当前选中图片下的小圆点设置颜色for (int i = 0; i < imageViews.length; i++) {imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);if (arg0 != i) {imageViews[i].setBackgroundResource(R.drawable.page_indicator_unfocused);}}}}
}

至此就基本实现了广告viewpager+小点点导航的demo了。

源码下载:

(申明,这源码并非我自己的原创,因为效果差不多就给出来了,是有参考价值的)

Viewpager + 小点点导航的具体实现相关推荐

  1. android viewpager标题,ViewPager顶部导航栏联动效果(标题栏条目多)

    如果标题栏过多,超过屏幕的宽度,该怎么弄,下面我们就来解决一下,效果如下: 其实和之前写的也差不多,我就是在哪个demo里面添加和修改了一下,就加了几个title标题,加了几个图片,最重要的是给Tab ...

  2. Android 使用ViewPager实现导航页面

    PagerAdapter类 /*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/7/23 17*/public class GuideP ...

  3. ViewPager小点点

    一.先布局:在布局中定义线性布局,最后将图片添加到布局中.                                                                        ...

  4. android viewpager button 导航,ViewPager做底部导航

    做了一个项目,需要使用底部导航功能,仿微信效果,可以左右滑动切换页面.好处就是比较适合用户手势操作,操作效果比较好:缺点是viewpager控件需要提前加载下一个页面,最少提前加载一个页面,为了保证左 ...

  5. ViewPager实现导航效果简单应用1

    1 添加依赖 implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02' 创建项目的时候请勾选Use androidX 不然库冲突 2 ...

  6. Android ViewPager导航------平凡中有奇迹

    ViewPager做导航想不想有这样的效果: 比如说有四张图片,下面有四个圆点,当页面滑动的时候一个点变大一个点变小(或者是一个点变小一个点变大),等于说同时在执行两个动画. package com. ...

  7. 头部广告栏viewpager + recyclerview

    JRecyclerView A ViewPager+RecyclerView implemention base on RecyclerView. Support the header(ViewPag ...

  8. Android github上优秀开源项目分类汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...

  9. Android 开源项目分类汇总(很全)

    目录 前言 目前包括: 第一部分 个性化控件(View) 一.ListView 二.ActionBar 三.Menu 四.ViewPager .Gallery 五.GridView 六.ImageVi ...

最新文章

  1. 【底层原理】四位计算机的原理及其实现
  2. java的this_java的this是什么意思
  3. C 桥接模式 - 开关和电器
  4. SpringMVC+Thymeleaf如何处理URL中的动态查询参数
  5. iOS开发第三方库汇总
  6. oracle中的ROLLUP函数
  7. 《Git与Github使用笔记》第8章 github常见操作和常见错误
  8. 如何求地球上两点之间的最短距离_高中数学“最实在”的蒙题技巧,让高中数学短时间内突破120分...
  9. 安装sql 无法重启计算机,win10系统安装sQL server 2008显示重新启动计算机失败的步骤介绍...
  10. APP推广|小众APP推广渠道,总有适合你的。
  11. CMD打开Git Bash
  12. Zabbix5.0前端个性化设置,手把手教你定制Logo
  13. 【python爬虫】爬取深圳证券业协会公布的营业部数据并对pdf文件进行解析
  14. 神州战神笔记本清灰+换硅脂-记录
  15. Jenkins 添加配置Git账号密码凭据
  16. c语言考研复试一般考什么,考研复试考什么
  17. c# HttpClient 获取cookie
  18. 构建数据思维从认知事物的基本方法开始!
  19. 自媒体运营之【流量的价值】
  20. office中为何还要保留Access数据库? 【3500人回复】知乎

热门文章

  1. NotifyICon使用
  2. GB/T 25000.51-2016解读系列之性能效率
  3. 二次安检!自带文具!多地要求提前一小时到考场!
  4. Python 求阶层(n的累乘、n的累加)
  5. 常着敬畏之心,石高涛带领天搜股份以变求生
  6. 微信小程序如何制作消息提示框---wx.showToast(Object object)
  7. JAVA入门(知识梳理)
  8. 机遇与挑战并存~5G商业牌照发放为行业带来哪些新发展商机?
  9. Python中的shelve模块
  10. C#操作摄像头实现拍照监控录像功能