利用viewPager实现导航界面
2016-06-29 17:07
323 查看
导航界面(图片下方带选中时变颜色的点点):
首先:
1.需要一个view的list
2.需要一个PagerAdapter
重写Adapter中的4个方法:
实现了Adapter之后开始实现下方的圆点:
下方的圆点可以采用一个布局容器,然后添加view到布局中实现4个圆点!
布局容器就用LinearLayout,通过给view添加圆点的背景图片(通过图片选择器来实现图片颜色的切换)实现圆点。
灰点的xml绘图文件:
drawable目录下。
<根元素为shape>
<conters :角
<radius :半径
<solid : 固体 颜色等
注意:
设定宽高在LayoutParams构造器参数里, 直接写单位是px, 不是 dp!!!
这里需要处理!
最后完成事件:
给viewPager设置事件重写三个方法:
其中onPageSelected();
这个方法是当前页面的方法因此我们可以对当前页面做一些处理,比如改变当前页面圆点的颜色,或者控制当前页面的按钮是否显示等!
如果只需要滑动时红点相应改变成选中的颜色则:
或者直接在此设置当前点颜色是红色,其他点颜色是灰色的。
如果想要出现看到点的移动效果:
1.就在普通点的布局中单独添加一个view(红颜色背景的点)覆盖住原来的点。
2.onPageScrolled()方法是在滑动时执行的,因此如果我们想在滑动时处理圆点的移动比例显示,需要这个方法。
2.1而移动的比例需要计算圆点和圆点之间的距离!注意:这个距离不是间距,而是左上角的点到第二个圆点左上角的点之间的距离。
因此这个距离需要界面完成绘制之后才能通过界面的参数确定下来。
2.2:通过监听布局完成后的函数来确定点与点之间的距离:
因为布局每进行一次重绘都会调用该函数,所以要取消监听只执行一次回调方法!
2.3 在onPageScrolled()方法中根据移动的比例改变红点的移动距离:
通过上面的方法即可完成一个导航的viewPager。这很简单,其中需要的主要是动态添加view控件时布局参数,和点与点之间通过回调函数计算的部分!!
首先:
1.需要一个view的list
2.需要一个PagerAdapter
重写Adapter中的4个方法:
class pageAdapter extends PagerAdapter{ @Override public int getCount() { return guildList.size(); } /** * * @param view * @param object * @return 返回项决定是否显示界面 ,起到过滤和判断的作用 */ 如果改成true则所有界面都显示,如果改成false则都不显示。 @Override public boolean isViewFromObject(View view, Object object) { return view==object; } //移除 @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } //加载界面 @Override public Object instantiateItem(ViewGroup container, int position) { View view= guildList.get(position); container.addView(view); return view; } }
实现了Adapter之后开始实现下方的圆点:
下方的圆点可以采用一个布局容器,然后添加view到布局中实现4个圆点!
布局容器就用LinearLayout,通过给view添加圆点的背景图片(通过图片选择器来实现图片颜色的切换)实现圆点。
View viewPoint =new View(this); viewPoint.setBackgroundResource(R.drawable.gray_point); //给点设置放置的位置 LinearLayout.LayoutParams ll= new LinearLayout.LayoutParams(40,40);//这里给圆点设置大小是通过LayoutParams的!是所在布局类型的LayoutPararams //点之间设置间距 if(i==0){} else{ ll.leftMargin=10; //左边距 } viewPoint.setLayoutParams(ll); llPoints.addView(viewPoint);
灰点的xml绘图文件:
drawable目录下。
<根元素为shape>
<conters :角
<radius :半径
<solid : 固体 颜色等
注意:
设定宽高在LayoutParams构造器参数里, 直接写单位是px, 不是 dp!!!
这里需要处理!
最后完成事件:
给viewPager设置事件重写三个方法:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { /** * 页面滑动过程中执行 * @param position 当前位置 * @param positionOffset 偏移比例 * @param positionOffsetPixels */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //计算距离滑动红点 RelativeLayout.LayoutParams rl = (RelativeLayout.LayoutParams) redpoint.getLayoutParams(); //设置红点在布局中的有边距 rl.leftMargin= (int) (distens*(positionOffset+position)); redpoint.setLayoutParams(rl); } /** * 当前页面执行方法 * @param position */ @Override public void onPageSelected(int position) { if(position==guildList.size()-1){ finishButton.setVisibility(View.VISIBLE); }else { finishButton.setVisibility(View.GONE); } /*RelativeLayout.LayoutParams rl = (RelativeLayout.LayoutParams) redpoint.getLayoutParams(); //设置红点在布局中的有边距 rl.leftMargin= distens*position; redpoint.setLayoutParams(rl);*/ } @Override public void onPageScrollStateChanged(int state) { } }); }
其中onPageSelected();
这个方法是当前页面的方法因此我们可以对当前页面做一些处理,比如改变当前页面圆点的颜色,或者控制当前页面的按钮是否显示等!
如果只需要滑动时红点相应改变成选中的颜色则:
public void onPageSelected(int position) { RelativeLayout.LayoutParams rl = (RelativeLayout.LayoutParams) redpoint.getLayoutParams(); rl.leftMargin= distens*position; redpoint.setLayoutParams(rl); }
或者直接在此设置当前点颜色是红色,其他点颜色是灰色的。
如果想要出现看到点的移动效果:
1.就在普通点的布局中单独添加一个view(红颜色背景的点)覆盖住原来的点。
2.onPageScrolled()方法是在滑动时执行的,因此如果我们想在滑动时处理圆点的移动比例显示,需要这个方法。
2.1而移动的比例需要计算圆点和圆点之间的距离!注意:这个距离不是间距,而是左上角的点到第二个圆点左上角的点之间的距离。
因此这个距离需要界面完成绘制之后才能通过界面的参数确定下来。
2.2:通过监听布局完成后的函数来确定点与点之间的距离:
redpoint.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //取消注册只监听一次 redpoint.getViewTreeObserver().removeOnGlobalLayoutListener(this); //获取距离 distens= llPoints.getChildAt(1).getLeft()-llPoints.getChildAt(0).getLeft(); } });
因为布局每进行一次重绘都会调用该函数,所以要取消监听只执行一次回调方法!
2.3 在onPageScrolled()方法中根据移动的比例改变红点的移动距离:
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //计算距离滑动红点 RelativeLayout.LayoutParams rl = (RelativeLayout.LayoutParams) redpoint.getLayoutParams(); //设置红点在布局中的有边距 rl.leftMargin= (int) (distens*(positionOffset+position)); redpoint.setLayoutParams(rl); }
通过上面的方法即可完成一个导航的viewPager。这很简单,其中需要的主要是动态添加view控件时布局参数,和点与点之间通过回调函数计算的部分!!
相关文章推荐
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- jQuery实现下滑菜单导航效果代码
- C#实现将Email地址转成图片显示的方法
- C#实现图片加相框的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- jquery实现的仿天猫侧导航tab切换效果