`
men4661273
  • 浏览: 278769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

fragment+viewpager+radioButton设计滑动导航界面

阅读更多

       最近学习到了viewpager的使用,利用fragment+viewpager+radioButton组合进行了一个导航菜单加界面的开发,再次分享一下,自己也算是复习一下。

       首先新建一个工程,我现在的这个sdk的版本,新建工程默认创建一个activity,使用的是fragment实现,用着不太习惯,我一般会修改为原来的模式,一个activity,加载一个layout作为主界面,然后删掉多余的代码,运行一下,主界面出来了:



        然后我们在界面布局文件中区调textview,,放一个viewpager的组件,铺满全屏幕:

    <android.support.v4.view.ViewPager
        android:id="@+id/mViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

        新建三个布局文件,很简单的就行,分别有一个按钮,作为我们viewpager里面的界面元素,这里就不列出来了。

        接下来新建三个fragment的类,继承自v4的Fragment,并重写其onCreateView方法,初始化将每个Fragment的界面,下面列出其中一个代码片段:

package com.example.fragmentviewpager;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentOne extends Fragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragment_page1, container,false);
		return view;
	}
}

         接下来就要在activity中去初始化viewpager啦,先实例化viewpager对象,拿到我们的控件,并初始化Fragment数组,

private ViewPager viewPager;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		viewPager = (ViewPager)findViewById(R.id.mViewPager);
		Fragment fragmentOne = new FragmentOne();
  
                Fragment fragmentTwo = new FragmentTwo();
  
                Fragment fragmentThree = new FragmentThree();
  
                fragments = new Fragment[]{fragmentOne,fragmentTwo,fragmentThree};
	}

        然后我们就要给它设置适配器,还没有,我们创建一个适配器类,继承自FragmentPagerAdapter,然后重写父类的抽象法方法,重写构造方法,构造数据源,可以直接写在activity中,作为内部类:

class MyViewPagerAdapter extends FragmentPagerAdapter{

		public MyViewPagerAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int index) {
			return fragments[index];
		}

		@Override
		public int getCount() {
			return fragments.length;
		}
		
	}

         接下来在onCreate方法中初始化我们的adapter,给viewpager设置上:

		MyViewPagerAdapter adapter = new MyViewPagerAdapter(getSupportFragmentManager());
		viewPager.setAdapter(adapter);

 

        运行一下,我们的viewpager+fragment就出现啦!fragment的好处就是可以与activity进行分离,传统的方式需要在activity中加载所有视图并初始化各种操作,造成activity代码杂乱。

 

       接下来我们就要开始添加标题,上下都可以,我把它放在上面, 标题栏放几个textView,设置其点击事件,并高亮当前选中页就可以,我采用radiobutton的方式,来进行切换。

        我们现在viewpager组件上面添加一个radiogroup,里面我们通过动态的方式创建radioButton,这样添加一页的布局文件不需要修改:

     <RadioGroup
          android:id="@+id/radioGroup"
          android:layout_width="match_parent"
          android:layout_height="38dip"
          android:layout_alignParentTop="true"
          android:background="#000000"
          android:orientation="horizontal" />

        然后我们新建一个radiobutton的布局文件nav_radiogroup_item.xml,设置一下radiobutton的样式,

 

<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:background="@drawable/rb_fouce_bg"
    android:button="@null"
    android:checked="false"
    android:gravity="center"
    android:text=""
    android:textColor="@drawable/rb_blue_bg"
    android:textSize="14.0dip" />

        可以看到radiobutton的样式中,背景和文字显示都使用了drawable的方式,使用了两个selector,处理单击以及选中时背景和文字的交替变化,两个selector文件如下:

       rb_blue_bg.xml处理文字颜色

<?xml version="1.0" encoding="UTF-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="#5AB0EB" />
    <item android:state_checked="false" android:color="#ffffff"/>
</selector>

       rb_fouce_bg.xml处理背景颜色

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@color/blue"/>
    <item android:drawable="@color/translate"></item>
</selector>

       在背景颜色处理是用到了color资源,在我们的colors.xml中定义需要的颜色:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="blue">#99FFFF</color>
    <color name="translate">#000000</color>
    <color name="black">#000000</color>
    <color name="white">#ffffff</color>
    <color name="green">#ff0000</color>
    <color name="red">#00ffff</color>
</resources>

        接下来处理标题资源文件,我们卸载arrays.xml里面,方便配置:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="titles">
        <item >页面1</item>
        <item >页面2</item>
        <item >页面3</item>
    </string-array>
</resources>

       

        资源文件处理完毕,现在开始代码处理,在activity中初始化radiogroup以及我们的标题数组:

		radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
		titles = getResources().getStringArray(R.array.titles);

         接下来动态创建radiobutton添加到radiogroup中去,需要计算一下每个按钮的宽度:

		//计算每个标题的宽度
		Display display = getWindowManager().getDefaultDisplay();
		DisplayMetrics dm = new DisplayMetrics();
		display.getMetrics(dm);
		titleWidth = dm.widthPixels / titles.length;
		//动态添加radiobutton
		RadioButton rb = null;
		radioGroup.removeAllViews();
		LayoutInflater inflater = LayoutInflater.from(this);
		for (int i = 0; i < titles.length; i++) {
			//从布局中读取单选按钮布局
			 rb = (RadioButton)inflater.inflate(R.layout.nav_radiogroup_item, null);
			 //设置显示文字
			 rb.setText(titles[i]);
			 //设置id。不能丢,区分用
			 rb.setId(i);
			 rb.setLayoutParams(new LayoutParams(titleWidth,LayoutParams.MATCH_PARENT));
			 if (i == 0) {
				 rb.setChecked(true);
			 }
			 radioGroup.addView(rb);
		}

 

          运行一下,我们的标题出来了:

 

 

 

 

 

 

 

 

 

        但是和viewpager还不同步,下面开始写单选按钮时间和viewpager的选择事件:

 

 

 

//单选按钮事件
		radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				//选中时viewpager联动
				viewPager.setCurrentItem(checkedId);
			}
		});
		//viewpager选中事件
		viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int index) {
				//选中时模拟单选按钮的单击事件
				((RadioButton)radioGroup.getChildAt(index)).performClick();
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				
			}
		});

 

 

 

<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">
     <RadioGroup
          android:id="@+id/radioGroup"
          android:layout_width="match_parent"
          android:layout_height="38dip"
          android:layout_alignParentTop="true"
          android:background="#000000"
          android:orientation="horizontal" />
     <ImageView 
	    android:id="@+id/splitImage"
	    android:layout_below="@id/radioGroup"
	    android:layout_width="5dip"
	    android:layout_height="5dip"
	    android:background="#5AB0EB"
	    android:scaleType="matrix"/>
    <android.support.v4.view.ViewPager
        android:layout_below="@id/splitImage"
        android:id="@+id/mViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>
 
 
  
splitImage = (ImageView)findViewById(R.id.splitImage);
		LayoutParams layoutParams = splitImage.getLayoutParams();
		layoutParams.width = titleWidth;
           修改单选按钮单击事件,增加imageView的动画效果:
//单选按钮事件
		radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				//选中时viewpager联动
				viewPager.setCurrentItem(checkedId);
				View radioButton = group.getChildAt(checkedId);
				//创建位移动画,从当前位置移动到新位置
				Animation animation = new TranslateAnimation(splitImageLeft, radioButton.getLeft(), 0f, 0f);
				animation.setDuration(300);
				animation.setFillAfter(true);
				splitImage.startAnimation(animation);
				//记录当前位置
				splitImageLeft = radioButton.getLeft();
			}
		});
    运行效果,差不多了:


 
  • 大小: 8.8 KB
  • 大小: 10 KB
  • 大小: 11.3 KB
  • 大小: 11.6 KB
分享到:
评论

相关推荐

    停车场管理系统c语言.docx

    问题描述: 停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入; 当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 1.基本要求 (1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 (2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。 (3)栈以顺序结构实现,队列以链表实现。 2.重点难点 重点:针对停车场问题的特点,利

    精选毕设项目-人民好公仆小程序(生活+便民+政务).zip

    精选毕设项目-人民好公仆小程序(生活+便民+政务)

    精选毕设项目-相册;处理用户信息.zip

    精选毕设项目-相册;处理用户信息

    精选毕设项目-喵喵小说.zip

    精选毕设项目-喵喵小说

    精选毕设项目-图片预览带后端.zip

    精选毕设项目-图片预览带后端

    精选项目-爱靓女带后台.zip

    精选项目-爱靓女带后台

    法院综合安全监管平台解决方案PPT(53页).pptx

    在科技与司法的交响曲中,智慧法院应运而生,成为新时代司法服务的新篇章。它不仅仅是一个概念,更是对法院传统工作模式的一次深刻变革。智慧法院通过移动信息化技术,为法院系统注入了强大的生命力,有效缓解了案多人少的矛盾,让司法服务更加高效、便捷。 立案、调解、审判,每一个阶段都融入了科技的智慧。在立案阶段,智慧法院利用区块链技术实现可信存证,确保了电子合同的合法性和安全性,让交易双方的身份真实性、交易安全性得到了有力见证。这不仅极大地缩短了立案时间,还为后续审判工作奠定了坚实的基础。在调解阶段,多元调解服务平台借助人工智能、自然语言处理等前沿技术,实现了矛盾纠纷的快速化解。无论是矛盾类型的多元化,还是化解主体的多元化,智慧法院都能提供一站式、全方位的服务,让纠纷解决更加高效、和谐。而在审判阶段,智能立案、智能送达、智能庭审、智能判决等一系列智能化手段的应用,更是让审判活动变得更加智能化、集约化。这不仅提高了审判效率,还确保了审判质量的稳步提升。 更为引人注目的是,智慧法院还构建了一套完善的执行体系。移动执行指挥云平台的建设,让执行工作变得更加精准、高效。执行指挥中心和信息管理中心的一体化应用,实现了信息的实时传输和交换,为执行工作提供了强有力的支撑。而执行指挥车的配备,更是让执行现场通讯信号得到了有力保障,应急通讯能力得到了显著提升。这一系列创新举措的实施,不仅让执行难问题得到了有效解决,还为构建诚信社会、保障金融法治化营商环境提供了有力支撑。智慧法院的出现,让司法服务更加贴近民心,让公平正义的阳光更加温暖人心。

    西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子12

    西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子1200 1214DC DC DC.昆仑通态TPC7062Ti ,西门子KTP700 Basic PN,台达DTK 4848V12温控器。 说明:的是程序,带详细注释程序,西门子触摸屏程序,PLC设置和温控器设置,接线说明书。 #SIEMENS 西门子

    机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip

    机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip

    VB6编写的上位机采集2路温度 并形成曲线图 还可查看历史数据

    VB6编写的上位机源码,可实时显示曲线图,带有数据库,可以进行历史数据的保存 及 查看历史采集数据。

    精选毕设项目-新浪读书.zip

    精选毕设项目-新浪读书

    jQuery+Slick插件实现游戏人物轮播展示切换特效源码.zip

    jQuery+Slick插件实现游戏人物轮播展示切换特效源码是一款通过背景图片的切换来显示不同的人物效果,轮播效果通过slick幻灯片插件来制作。效果非常棒,有需要的朋友可以直接下载使用,适应各大网站

    精选毕设项目-地图查找附件.zip

    精选毕设项目-地图查找附件

    (蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据

    (蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据。

    MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matl

    MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matlab工作区画出。

    科研项目结题报告的撰写指南:结构、内容与注意事项

    一、结题报告的类型及主要结构 结题报告是一种专门用于科研课题结题验收的实用性报告类文体,也叫研究报告。它是研究者在课题研究结束后对科研课题研究过程和研究成果进行客观、全面、实事求是的描述,是课题研究所有材料中最主要的材料,也是科研课题结题验收的主要依据。   一篇规范、合格的结题报告,需要回答好3个问题:一是“为什么要选择这项课题进行研究?”二是“这项课题是怎样进行研究的?”三是“课题研究取得哪些研究成果?”  基本结构大致包括以下部分: 第一个问题 “为什么要选择这项课题进行研究?”  1.课题提出的背景;2.课题研究的意义(包括理论意义和现实意义,这个部分也可以合并归入“课题提出的背景”部分);第二个问题“这项课题是怎样进行研究的?”3.文献综述;4.课题研究的理论依据;5.课题研究的目标;6.课题研究的主要内容;7.课题研究的对象;8.课题研究的方法;9. 课题研究的主要过程(研究的步骤);   除了第9部分外,从第1到第8部分在填报课题立项申报表、在制定课题研究方案、在开题报告中,都有要求,内容基本相同。到了撰写结题报告时,只须稍作适当修改就可以了。而第9部分,则需要通过对

    1+X网络安全应急响应之应急准备:构建高效安全的应急响应体系

    内容概要:本文档重点讲述了网络安全应急响应的各项准备工作,涵盖了‘1+X’网络安全应急响应的职业技能等级证书概述、应急响应的基础知识、应急响应组织的建立、风险评估与改进、应急响应预案的制定以及详细的应急响应计划处置样例。文中详细介绍了各级职业技能的要求和任务,尤其关注如何未雨绸缪,制定完善的应急预案以应对潜在的网络安全风险;同时也探讨了如何在网络安全事件发生时,采取及时有效的应急处置措施。 适合人群:从事或有兴趣进入网络安全领域的从业人员,尤其是准备考取‘1+X’网络安全应急响应职业技能等级证书的相关人员。 使用场景及目标:帮助读者了解网络安全应急响应的基本概念及其在整个国家安全框架中的重要地位;指导读者学会如何建立健全高效的应急响应组织结构,如何进行全面的风险评估以及如何编制切实可行的应急预案;通过实例剖析,增强读者应对突发网络安全事件的能力。文档的目标在于提升读者在不同层面的专业技能,包括但不限于系统备份、日志分析、安全漏洞修复等方面的能力。 阅读建议:此文档结构清晰,内容详尽,非常适合有一定基础的技术从业者参考学习。建议读者逐章节深入了解,特别是关注自身岗位对应的技能细分类别。此外,结合实例深入理解和练习如何进行应急处置是非常有价值的,有助于提升自身的实战能力。

    电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电

    电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数。 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电耗、匀速工况续航、百公里电耗等信息。 实际项目中使用的计算仿真模型. 两个模型打包

    chromedriver-linux64_122.0.6254.0.zip

    chromedriver-linux64_122.0.6254.0

    SRS构型七自由度冗余机械臂运动学建模全套matlab代码 代码主要功能: 1. 基于臂角参数化方法求解机械臂在给定末端位姿和臂角下的关节角度; 2. 求解机械臂在给定末端位姿下的有效臂角范围

    SRS构型七自由度冗余机械臂运动学建模全套matlab代码 代码主要功能: [1]. 基于臂角参数化方法求解机械臂在给定末端位姿和臂角下的关节角度; [2]. 求解机械臂在给定末端位姿下的有效臂角范围,有效即在该区间内机械臂关节角度不会超出关节限位; [3]. 以避关节限位为目标在有效臂角区间内进行最优臂角的选取,进而获取机械臂在给定末端位姿下的最优关节角度。 购前须知: 1. 代码均为个人手写,主要包含运动学建模全套代码; 2. 代码已经包含必要的注释; 包含原理推导文档,不包含绘图脚本以及urdf;

Global site tag (gtag.js) - Google Analytics