ViewPager中设置底部显示圆点焦点这种使用其实还是很常见的,对于这个功能的实现其实有很多方式:
  
1. 通过在显示图片中加入圆点,也就是我们可以直接使用带圆点的图片。
2. 通过在代码中实现这一功能。在代码中实现也有两种方式:

  •   在布局中直接在底部添加点。

  •   在java代码中动态的添加点。

  我个人还是比较赞同第一种方式的,因为并没有什么缺点,并且还可以简化代码。这只是我个人认为哈……

  即使第一种方法好用,我们也应该掌握如何在代码中实现这一功能。想要源码的可以点击此处下载:源码下载链接 

XML布局中添加

1.在布局中通过FrameLayout布局在ViewPager上覆盖一个LinearLayout,这个LnearLayout中包含三个点。也就是我们滑动界面时显示的三个点。

<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:context="com.lishuang.administrator.viewpager0901.ShowActivity"><FrameLayout
        android:layout_width="match_parent"android:layout_height="match_parent"><!-- 定义ViewPager充满整个FrameLayout布局 --><android.support.v4.view.ViewPager
            android:id="@+id/viewpager_show"android:layout_width="match_parent"android:layout_height="match_parent" /><!--在FrameLayout布局的底部放置三个点--><LinearLayout
            android:layout_width="match_parent"android:layout_height="30dp"android:layout_gravity="bottom"android:gravity="center"android:orientation="horizontal"><ImageView
                android:id="@+id/dot_first"android:layout_width="10dp"android:layout_height="10dp"android:layout_margin="10dp"android:background="@drawable/dot_normal" /><ImageView
                android:id="@+id/dot_second"android:layout_width="10dp"android:layout_height="10dp"android:layout_margin="10dp"android:background="@drawable/dot_normal" /><ImageView
                android:id="@+id/dot_thrid"android:layout_width="10dp"android:layout_height="10dp"android:layout_margin="10dp"android:background="@drawable/dot_normal" /></LinearLayout></FrameLayout>
</RelativeLayout>

2. 创建一个MyPagerAdapter继承PagerAdapter,重写其中个四个方法,具体在《Android UI设计——ViewPager的简单使用(一)》
这篇博客中已经进行了描述,这里不再赘述,直接上代码。

public class MyPagerAdapter extends PagerAdapter {private List<View> mViews;//三个布局的集合/*通过构造器获得数据*/public MyPagerAdapter(List<View> mViews) {this.mViews = mViews;}@Overridepublic int getCount() {return mViews.size();//显示的布局的数量,我们这里为三个。}@Overridepublic boolean isViewFromObject(View view, Object o) {return view == o;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {//增加Viewcontainer.addView(mViews.get(position));return mViews.get(position);}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {//删除Viewcontainer.removeView(mViews.get(position));}
}

3. 首先要先分析一下dot的显示:
  我们通过滑动屏幕翻页,当前页面的dot显示为浅色, 未显示页面的dot为深色。
  在MainActivity中通过定义一个List集合存储dot在布局中的对象。通过viewPager的点击事件setOnPageChangeListener()来监听页面的滑动,当页面滑动后将代表当前页面的dot赋值为浅色,将前一个页面恢复为深色。

public class ShowActivity extends Activity {private ViewPager mViewPager;private List<View> mViews;private LayoutInflater mInflater;private MyPagerAdapter myPagerAdapter;private List<ImageView> mDots;//定义一个集合存储三个dotprivate int oldPosition;//记录当前点的位置。@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去除标题栏,这样界面感觉会好看点,必须在setContentView()方法前。requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_show);mViewPager = (ViewPager) findViewById(R.id.viewpager_show);mInflater = getLayoutInflater();//初始化是三个界面mViews = new ArrayList<View>();View viewFirst = mInflater.inflate(R.layout.item_frist, null);View viewSecond = mInflater.inflate(R.layout.item_second, null);View viewThrid = mInflater.inflate(R.layout.item_third, null);mViews.add(viewFirst);mViews.add(viewSecond);mViews.add(viewThrid);//初始化三个dotmDots = new ArrayList<ImageView>();ImageView dotFirst = (ImageView) findViewById(R.id.dot_first);ImageView dotFSecond = (ImageView) findViewById(R.id.dot_second);ImageView dotThrid = (ImageView) findViewById(R.id.dot_thrid);mDots.add(dotFirst);mDots.add(dotFSecond);mDots.add(dotThrid);oldPosition = 0;mDots.get(oldPosition).setImageResource(R.drawable.dot_focused);myPagerAdapter = new MyPagerAdapter(mViews);mViewPager.setAdapter(myPagerAdapter);mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {mDots.get(oldPosition).setImageResource(R.drawable.dot_normal);mDots.get(position).setImageResource(R.drawable.dot_focused);oldPosition = position;}@Overridepublic void onPageSelected(int position) {}@Overridepublic void onPageScrollStateChanged(int state) {}});}
}

效果展示:

代码中动态添加

1.在布局中,在ViewPager的底部覆盖一个LinearLayout,将从代码中动态添加的点添加到这个LinearLayout布局上。

<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:context=".MainActivity"><android.support.v4.view.ViewPager
        android:id="@+id/viewpager_second"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v4.view.ViewPager><LinearLayout
        android:id="@+id/linearlayout_dot"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginBottom="10dp"android:gravity="center"android:orientation="horizontal"></LinearLayout>
</RelativeLayout>

2. 创建一个MyPagerAdapter继承PagerAdapter,重写其中个四个方法,具体在《Android UI设计——ViewPager的简单使用(一)》
这篇博客中已经进行了描述,这里不再赘述,直接上代码。

public class MyPagerAdapter extends PagerAdapter {private List<View> mViews;//三个布局的集合/*通过构造器获得数据*/public MyPagerAdapter(List<View> mViews) {this.mViews = mViews;}@Overridepublic int getCount() {return mViews.size();//显示的布局的数量,我们这里为三个。}@Overridepublic boolean isViewFromObject(View view, Object o) {return view == o;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {//增加Viewcontainer.addView(mViews.get(position));return mViews.get(position);}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {//删除Viewcontainer.removeView(mViews.get(position));}
}

3. 在Activity中动态的添加点。

public class MainActivity extends Activity {private ViewPager mViewpagerSecond;private List<View> mViews;private List<ImageView> mDots;private MyPagerAdapter myPagerAdapter;private LinearLayout mLinearLayout;private LayoutInflater mInflater;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mViewpagerSecond = (ViewPager) findViewById(R.id.viewpager_second);mInflater = getLayoutInflater();mLinearLayout = (LinearLayout) findViewById(R.id.linearlayout_dot);//初始化页面mViews = new ArrayList<View>();View view1 = mInflater.inflate(R.layout.viewpager_item_one, null);View view2 = mInflater.inflate(R.layout.viewpager_item_two, null);View view3 = mInflater.inflate(R.layout.viewpager_item_three, null);mViews.add(view1);mViews.add(view2);mViews.add(view3);//通过循环动态的添加点。mDots = new ArrayList<ImageView>();for (int i = 0; i < mViews.size(); i++) {ImageView imageView = new ImageView(this);int width = Dp2Px(this, 10);int heigth = Dp2Px(this, 10);int margin = Dp2Px(this, 10);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, heigth);params.setMargins(margin, margin, margin, margin);//设置margin,也就是外边距。imageView.setLayoutParams(params);//传入参数params设置宽和高imageView.setImageResource(R.drawable.dot_normal);//设置图片mLinearLayout.addView(imageView);//将图片添加到布局中//将dot添加到dots集合中mDots.add(imageView);}mDots.get(0).setImageResource(R.drawable.dot_focused);//设置启动后显示的第一个点myPagerAdapter = new MyPagerAdapter(mViews);mViewpagerSecond.setAdapter(myPagerAdapter);mViewpagerSecond.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int i, float v, int i1) {}@Overridepublic void onPageSelected(int position) {//for-each循环将所有的dot设置为dot_normalfor (ImageView imageView : mDots) {imageView.setImageResource(R.drawable.dot_normal);}//设置当前显示的页面的dot设置为dot_focused        mDots.get(position).setImageResource(R.drawable.dot_focused);}@Overridepublic void onPageScrollStateChanged(int i) {}});}/*将dp转化为px*/public int Dp2Px(Context context, float dp) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dp * scale + 0.5f);}
}

效果展示:

Android UI设计——ViewPager中设置底部显示圆点焦点(二)相关推荐

  1. 代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清

    本文首发于:行者AI 在工作中会遇到批量给图片添加文字,随机码等需求,当数据码数量较大时,UI的工作量就会非常大,这时候我们可以用python来帮我们提高工作效率. 1. 需求分析 我们有这样一张图片 ...

  2. android UI设计属性中英对照表(未修订)

    英语 中文 备注 plurals 多义性   Animator 动画师 android 3.0以上版本才能用 ordering 调整   sequentially 顺序地   together 同时 ...

  3. Android UI设计之十一自定义ViewGroup,打造通用的关闭键盘小控件ImeObser

    2019独角兽企业重金招聘Python工程师标准>>> 转载请注明出处:http://blog.csdn.net/llew2011/article/details/51598682 ...

  4. 【Android UI设计与开发】9:滑动菜单栏(一)开源项目SlidingMenu的使用和示例-转...

    一.SlidingMenu简介 相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了 ...

  5. Android UI设计小知识——富文本

    富文本 什么是富文本? 可能大家要问了,富文本是什么?怎么是这个"富"来,好奇怪啊--第一次接触的时候我也不知道什么是富文本,但是后来老师给举了一个例子就明白了.都喜欢用QQ聊天, ...

  6. android百度地图覆盖物异步加载图片,Android 百度地图marker中图片不显示的解决方法(推荐)...

    目的: 根据提供的多个经纬度,显示所在地的marker样式,如下: 问题: 1.发现marker中在线加载的图片无法显示出来: 2.获取多个对象后,却只显示出了一个marker: 以下为官网实现方法: ...

  7. 精彩绝伦的Android UI设计pdf

    下载地址:网盘下载 内容简介  · · · · · · 本书是Andriod UI设计领域的经典著作,Amazon五星级畅销书.不仅从Android应用设计者的角度系统讲解了要从事Android UI ...

  8. UI设计培训中的扁平化理念

    本文是为正在学习UI设计的同学们整理的一份资料,主要讲的是UI设计培训中的扁平化理念,扁平化的设计是抛弃一切装饰的设计,扁平化设计使得用户操作起来更加简洁.高效和舒适.简洁大方的交互界面设计自然能够引 ...

  9. android教程 - android ui 介绍,多图详解 “Android UI”设计官方教程

    我们曾经给大家一个<MeeGo移动终端设备开发UI设计基础教程>,同时很多朋友都在寻找Android UI开发的教程,我们从Android的官方开发者博客找了一份幻灯片,介绍了一些Andr ...

最新文章

  1. wireshrk中的名词说明
  2. PHP的JSON封装
  3. c++ 或者 vc++中判断程序实例是否运行
  4. 幸福框架:模式驱动开发
  5. Sublime Text 3 搭建Python3 IDE
  6. SpringBoot和监控管理
  7. 本地笔记软件_到底哪个笔记软件适合你
  8. redis中不同value类型的存取操作方式
  9. Oracle的diag文件可以删除,oracle11g rac diag/tnslsnr/pgis2/listener/alert 中的文件能删除吗...
  10. wireshark使用教程
  11. 视频教程-H3C-H3CNE 华三网络工程师从入门到精通 自学视频课程[肖哥]-H3C认证
  12. FPGA串口传图sobel边缘检测
  13. DeepFool论文翻译---DeepFool: a simple and accurate method to fool deep neural networks
  14. SELECT 1 FROM DUAL中的DUAL的作用
  15. LazyAn-cocos插件开发实战
  16. 关于计算机英语手抄报全国一等奖,获奖手抄报图片
  17. 做人做事箴言录(4)
  18. 大文件传输软件-镭速——MAC版分享
  19. JavaScript canvas
  20. 笔记:Smith圆图及其计算

热门文章

  1. [HTML]TABLE固定表头和行头
  2. 东方百货集团荆门东方百货连锁超市
  3. android 还原手机默认桌面
  4. Linux shell中的竖线(|)——…
  5. 泼水撒欢的季节里,身怀绝技的“黑科技”T恤让你放心去浪丨钛空舱
  6. 简单的 PHP 抽奖程序
  7. 但是生活不止眼前的苟且
  8. 2016-05-09 随感,生活还是眼前的苟且
  9. AndroidStudio Terminal的使用
  10. OSChina 周一乱弹 —— 你老婆和闺蜜总用奇怪的眼神看着你