ViewPager+Fragment实现滑动切换页面
1.实现思路
主界面四个导航按钮使用RadioButton,通过Selector 设置它的drawableTop属性来设置所显示的图片。通过 FragmentPagerAdapter 实现切换。
2.实现
(1)资源文件编写
主界面布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tiger.a20180115_wechat.MainActivity">
<RadioGroup
android:id="@+id/rg_menu_bar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_alignParentBottom="true"
android:background="@color/myWhite"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_weChat"
style="@style/menu_item"
android:drawableTop="@drawable/menu_chat"
android:text="WeChat"/>
<RadioButton
android:id="@+id/rb_contacts"
style="@style/menu_item"
android:drawableTop="@drawable/menu_contacts"
android:text="Contacts"/>
<RadioButton
android:id="@+id/rb_discovery"
style="@style/menu_item"
android:drawableTop="@drawable/menu_discovery"
android:text="Discovery"/>
<RadioButton
android:id="@+id/rb_me"
style="@style/menu_item"
android:drawableTop="@drawable/menu_me"
android:text="Me"/>
</RadioGroup>
<View
android:id="@+id/div_menu_bar"
android:layout_width="match_parent"
android:layout_height="3px"
android:layout_above="@id/rg_menu_bar"
android:background="@color/divColor"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/div_menu_bar"/>
</RelativeLayout>
(2)因为四个RadioButton 都一样所以抽出一个Style
<style name="menu_item">
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">1</item>
<item name="android:layout_height">match_parent</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:button">@null</item>
<item name="android:gravity">center</item>
<item name="android:paddingTop">3dp</item>
<item name="android:textColor">@drawable/menu_text</item>
<item name="android:textSize">18sp</item>
</style>
(3)文本颜色设置 Selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/txtGreen" android:state_checked="true" />
<item android:color="@color/txtGray" />
</selector>
(4)还有就是四个资源文件 Selector ,就是选中和不选中显示的图片,贴出一个,其他三个类似
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/chat_press" android:state_checked="true" />
<item android:drawable="@mipmap/chat_normal" />
</selector>
(5)接下来就是编写四个Fragment及对应布局
3.FragmentPagerAdapter
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyFragmentAdapter extends FragmentPagerAdapter{
private FragmentWeChat fgWeChat;
private FragmentContacts fgContacts;
private FragmentDiscovery fgDiscovery;
private FragmentMe fgMe;
public MyFragmentAdapter(FragmentManager fm) {
super(fm);
fgWeChat=new FragmentWeChat();
fgContacts=new FragmentContacts();
fgDiscovery=new FragmentDiscovery();
fgMe=new FragmentMe();
}
@Override
public Fragment getItem(int position) {
Fragment fragment=null;
switch (position){
case 0:
fragment=fgWeChat;
break;
case 1:
fragment=fgContacts;
break;
case 2:
fragment=fgDiscovery;
break;
case 3:
fragment=fgMe;
break;
}
return fragment;
}
@Override
public int getCount() {
return 4;
}
}
4. MainActivity
import android.support.v4.view.ViewPager;
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener
, ViewPager.OnPageChangeListener {
private RadioGroup radioGroup;
private RadioButton rBtnChat;
private RadioButton rBtnContacts;
private RadioButton rBtnDiscovery;
private RadioButton rBtnMe;
private ViewPager viewPager;
private MyFragmentAdapter fragementAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
void init() {
rBtnChat = (RadioButton) findViewById(R.id.rb_weChat);
rBtnContacts = (RadioButton) findViewById(R.id.rb_contacts);
rBtnDiscovery = (RadioButton) findViewById(R.id.rb_discovery);
rBtnMe = (RadioButton) findViewById(R.id.rb_me);
viewPager = (ViewPager) findViewById(R.id.viewPager);
radioGroup = (RadioGroup) findViewById(R.id.rg_menu_bar);
radioGroup.setOnCheckedChangeListener(this);
fragementAdapter = new MyFragmentAdapter(getSupportFragmentManager());
viewPager.setAdapter(fragementAdapter);
viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(this);
rBtnChat.setChecked(true); // set default choose
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb_weChat:
viewPager.setCurrentItem(0);
break;
case R.id.rb_contacts:
viewPager.setCurrentItem(1);
break;
case R.id.rb_discovery:
viewPager.setCurrentItem(2);
break;
case R.id.rb_me:
viewPager.setCurrentItem(3);
break;
}
}
//重写ViewPager页面切换的处理方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
//state的状态有三个,0表示什么都没做,1正在滑动,2滑动完成
if (state == 2) {
//对应值需要与 FragmentPagerAdapter 中的对应
switch (viewPager.getCurrentItem()) {
case 0:
rBtnChat.setChecked(true);
break;
case 1:
rBtnContacts.setChecked(true);
break;
case 2:
rBtnDiscovery.setChecked(true);
break;
case 3:
rBtnMe.setChecked(true);
break;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu);
return true;
}
}
主要代码就是以上这些。
参考自:http://www.runoob.com/w3cnote/android-tutorial-fragment-demo4.html
ViewPager+Fragment实现滑动切换页面的更多相关文章
- ViewPager源码分析——滑动切换页面处理过程
上周客户反馈Contacts快速滑动界面切换tab有明显卡顿,让优化. 自己验证又没发现卡顿现象,但总得给客户一个技术性的回复,于是看了一下ViewPager源码中处理滑动切换tab的过程. View ...
- ViewPager取消左右滑动切换功能
ViewPager取消左右滑动切换功能 最近做项目要求某种情况下ViewPager不能滑动,那么我们只需要重写这个方法就可以禁止ViewPager滑动 IndexViewPager.java: imp ...
- ViewPager撤消左右滑动切换功能
ViewPager取消左右滑动切换功能 最近做项目要求某种情况下ViewPager不能滑动,那么我们只需要重写这个方法就可以禁止ViewPager滑动 IndexViewPager.java: imp ...
- Android:使用ViewPager实现左右滑动切换图片(图上有点点)
在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...
- Android:使用ViewPager实现左右滑动切换图片 (简单版)
ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...
- jquery mobile左右滑动切换页面
jquery mobile左右滑动切换页面 $(function() {$("body").bind('swiperight', function() { $.mobile.ch ...
- 微信小程序左右滑动切换页面示例代码--转载
微信小程序——左右滑动切换页面事件 微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend. 这三个事件最重要的属性是pageX和pageY,表示X, ...
- 使用ViewPager+Fragment实现选项卡切换效果
实现效果 本实例主要实现用ViewPage和Fragment实现选项卡切换效果,选项卡个数为3个,点击选项卡或滑动屏幕会切换Fragment并实现选项卡下方下边框条跟随移动效果. 本程序用androi ...
- ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager
思路:新建一个Activity,且这个Activity要继承FragementActivity,在Activity的布局文件中放入了一个viewPager,为了效果好看,还做了个导航,使得ViewPa ...
随机推荐
- 如何将JPG格式的图片转换成PNG格式
study from : https://jingyan.baidu.com/article/6079ad0e63a4fc28ff86db37.html
- SpringBoot使用消息队列RabbitMQ
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲.消息分发的作用.RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,AMQP,即Advan ...
- tensorflow tensor Flatten 张量扁平化,多通道转单通道数据
slim.flatten(inputs,outputs_collections=None,scope=None) (注:import tensorflow.contrib.slim as slim) ...
- Node.js实战项目学习系列(1) 初识Node.js
前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...
- css选择器(常规选择器,伪类选择器,伪元素选择器,根元素选择器)
前言 CSS的一个核心特性是能向文档中的一组元素类型应用某些规则,本文将详细介绍CSS选择器 选择器 [通配选择器] 星号*代表通配选择器,可以与任何元素匹配 *{color: red;} [元素选择 ...
- 利用git提交代码
一.首先需要下载git 查看电脑是否安装git,打开终端,输入git,回车如果输出如下,则代表已安装了git 如果未安装,则会输出: 按照提示输入:sudo apt-get install git即可 ...
- [物理学与PDEs]第1章第2节 预备知识 2.1 Coulomb 定律, 静电场的散度与旋度
1. Coulomb 定律, 电场强度 (1) 真空中 $P_1$ 处有电荷 $q_1$, $P$ 处有电荷 $q$, ${\bf r}_1=\vec{P_1P}$, 则 $q$ 所受的力为 $$\b ...
- 02 Redis关闭服务报错---(error) ERR Errors trying to SHUTDOWN. Check logs.
127.0.0.1:6379> shutdown (error) ERR Errors trying to SHUTDOWN. Check logs. 1.在redis.conf中修改日志文件的 ...
- 同步Name到Comment 及 同步 Comment 到Name
在 PowerDesigner执行命令 Tools->Execute Commands->Edit/Run Scripts 代码一:将Name中的字符COPY至Comment中 Opti ...
- java(8)二重循环
一.二重循环 1.循环中,嵌套另外一个循环,将内层的循环,看成外层循环的一个循环操作 2.常见的二重循环 形式1: 外层while或do…while 内层为for循环 形式2: 外层.内层都 ...