Android UI设计——ViewPager中设置底部显示圆点焦点(二)
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中设置底部显示圆点焦点(二)相关推荐
- 代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清
本文首发于:行者AI 在工作中会遇到批量给图片添加文字,随机码等需求,当数据码数量较大时,UI的工作量就会非常大,这时候我们可以用python来帮我们提高工作效率. 1. 需求分析 我们有这样一张图片 ...
- android UI设计属性中英对照表(未修订)
英语 中文 备注 plurals 多义性 Animator 动画师 android 3.0以上版本才能用 ordering 调整 sequentially 顺序地 together 同时 ...
- Android UI设计之十一自定义ViewGroup,打造通用的关闭键盘小控件ImeObser
2019独角兽企业重金招聘Python工程师标准>>> 转载请注明出处:http://blog.csdn.net/llew2011/article/details/51598682 ...
- 【Android UI设计与开发】9:滑动菜单栏(一)开源项目SlidingMenu的使用和示例-转...
一.SlidingMenu简介 相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了 ...
- Android UI设计小知识——富文本
富文本 什么是富文本? 可能大家要问了,富文本是什么?怎么是这个"富"来,好奇怪啊--第一次接触的时候我也不知道什么是富文本,但是后来老师给举了一个例子就明白了.都喜欢用QQ聊天, ...
- android百度地图覆盖物异步加载图片,Android 百度地图marker中图片不显示的解决方法(推荐)...
目的: 根据提供的多个经纬度,显示所在地的marker样式,如下: 问题: 1.发现marker中在线加载的图片无法显示出来: 2.获取多个对象后,却只显示出了一个marker: 以下为官网实现方法: ...
- 精彩绝伦的Android UI设计pdf
下载地址:网盘下载 内容简介 · · · · · · 本书是Andriod UI设计领域的经典著作,Amazon五星级畅销书.不仅从Android应用设计者的角度系统讲解了要从事Android UI ...
- UI设计培训中的扁平化理念
本文是为正在学习UI设计的同学们整理的一份资料,主要讲的是UI设计培训中的扁平化理念,扁平化的设计是抛弃一切装饰的设计,扁平化设计使得用户操作起来更加简洁.高效和舒适.简洁大方的交互界面设计自然能够引 ...
- android教程 - android ui 介绍,多图详解 “Android UI”设计官方教程
我们曾经给大家一个<MeeGo移动终端设备开发UI设计基础教程>,同时很多朋友都在寻找Android UI开发的教程,我们从Android的官方开发者博客找了一份幻灯片,介绍了一些Andr ...
最新文章
- wireshrk中的名词说明
- PHP的JSON封装
- c++ 或者 vc++中判断程序实例是否运行
- 幸福框架:模式驱动开发
- Sublime Text 3 搭建Python3 IDE
- SpringBoot和监控管理
- 本地笔记软件_到底哪个笔记软件适合你
- redis中不同value类型的存取操作方式
- Oracle的diag文件可以删除,oracle11g rac diag/tnslsnr/pgis2/listener/alert 中的文件能删除吗...
- wireshark使用教程
- 视频教程-H3C-H3CNE 华三网络工程师从入门到精通 自学视频课程[肖哥]-H3C认证
- FPGA串口传图sobel边缘检测
- DeepFool论文翻译---DeepFool: a simple and accurate method to fool deep neural networks
- SELECT 1 FROM DUAL中的DUAL的作用
- LazyAn-cocos插件开发实战
- 关于计算机英语手抄报全国一等奖,获奖手抄报图片
- 做人做事箴言录(4)
- 大文件传输软件-镭速——MAC版分享
- JavaScript canvas
- 笔记:Smith圆图及其计算