Android——ViewPager和底部导航的配合
来源:互联网 发布:映客直播网站源码 编辑:程序博客网 时间:2024/05/24 05:03
ViewPager之前已经说过,微信左右滑动的效果就是ViewPager的效果,但是人家的滑
动和底部导航是一块变化的,所以我们来实现这个效果。
先来做底部导航,实际上是需要8张图片,选择的图片和未被选择到的图片,这些需要存放在资源包下面。
整体用LinearLayout布局,上面一个ViewPager,下面导航一个LinearLayout。
xml:
<LinearLayout 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" android:orientation="vertical" android:padding="5dp" tools:context="com.example.weibotest.MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/main_vp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="#f00" > </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="1" android:gravity="center" android:id="@+id/main_home" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/tabbar_home" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="首页" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="1" android:gravity="center" android:id="@+id/main_message" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/tabbar_message_center" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="消息" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="1" android:id="@+id/main_profile" android:gravity="center" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/tabbar_profile" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="个人" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:id="@+id/main_more" android:gravity="center" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/tabbar_more" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="更多" android:textSize="20sp" /> </LinearLayout> </LinearLayout></LinearLayout>
ViewPager必须使用全包名。
布局做好以后来写逻辑。
将4个LinearLayout放到数组中进行控件监听,当点击到那个LinearLayout时候切换图片。
同时需要4个Fragment,自然对应4个Fragment的布局。
由于用到的是ViewPager,需要创建Adapter继承FragmentPagerAdapter。
大体知道以后看看具体的代码:
Mainactivity:
package com.example.weibotest;import java.util.ArrayList;import java.util.List;import com.example.adapter.Myadapter;import com.example.fragment.HomeFragment;import com.example.fragment.MessageFragment;import com.example.fragment.MoreFragment;import com.example.fragment.ProfileFragment;import android.app.Activity;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.LinearLayout;public class MainActivity extends FragmentActivity implements OnClickListener, OnPageChangeListener { private LinearLayout home, message, profile, more; private LinearLayout lls[] = new LinearLayout[4]; private ViewPager vp; private int imgs[] = { R.drawable.tabbar_home, R.drawable.tabbar_message_center, R.drawable.tabbar_profile, R.drawable.tabbar_more }; private int imgs_select[] = { R.drawable.tabbar_home_highlighted, R.drawable.tabbar_message_center_highlighted, R.drawable.tabbar_profile_highlighted, R.drawable.tabbar_more_highlighted }; private Myadapter adapter; private List<Fragment> datas; private FragmentManager fm; private HomeFragment home_f; private MessageFragment message_f; private ProfileFragment profile_f; private MoreFragment more_f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initListener(); initFragments(); adapter=new Myadapter(fm, datas); vp.setAdapter(adapter); } private void initFragments() { // TODO Auto-generated method stub fm=getSupportFragmentManager(); home_f=new HomeFragment(); message_f=new MessageFragment(); profile_f=new ProfileFragment(); more_f=new MoreFragment(); datas=new ArrayList<Fragment>(); datas.add(home_f); datas.add(message_f); datas.add(profile_f); datas.add(more_f); } private void initListener() { // TODO Auto-generated method stub for (int i = 0; i < lls.length; i++) { lls[i].setOnClickListener(this); } vp.setOnPageChangeListener(this); } private void initViews() { // TODO Auto-generated method stub vp = (ViewPager) findViewById(R.id.main_vp); home = (LinearLayout) findViewById(R.id.main_home); message = (LinearLayout) findViewById(R.id.main_message); profile = (LinearLayout) findViewById(R.id.main_profile); more = (LinearLayout) findViewById(R.id.main_more); lls[0] = home; lls[1] = message; lls[2] = profile; lls[3] = more; } @Override public void onClick(View v) { // TODO Auto-generated method stub int index=0; switch (v.getId()) { case R.id.main_home: index=0; break; case R.id.main_message: index=1; break; case R.id.main_profile: index=2; break; case R.id.main_more: index=3; break; default: break; } changeSelected(index); vp.setCurrentItem(index); } public void changeSelected(int index) { for (int i = 0; i < lls.length; i++) { ImageView iv=(ImageView) lls[i].getChildAt(0); if(i==index) { iv.setImageResource(imgs_select[i]); }else { iv.setImageResource(imgs[i]); } } } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub changeSelected(arg0); }}
要想到达ViewPager和底部导航的同步,需要两步:
ViewPager设置监听setOnPageChangeListene,里面有三个需要重写的方法。
onPageScrollStateChanged 滚动状态改变的时候
onPageScrolled 滚动的时候
onPageSelected 被选中的时候
1、这里只 第三个方法中添加changeSelected(arg0)方法,当ViewPager被选中的时
候,底部导航需要改变,
2、同样点击导航 也需要改变ViewPager,这里需要在点击监听事件改变导航最后加上
vp.setCurrentItem(index);这样在改变导航以后会立马改变ViewPager。
0 0
- Android——ViewPager和底部导航的配合
- Android底部导航栏——FragmentTabHost+ViewPager+Fragment
- Android底部导航栏——bottomnavigation结合viewpager的实现
- 实例—ViewPager+RadioGroup实现底部导航栏和页面的滑动
- Android之RadioGroup+ViewPager制作的底部导航栏
- Android之RadioGroup+ViewPager制作的底部导航栏
- Android之RadioGroup+ViewPager制作的底部导航栏
- Android例子—Fragment实例讲解—底部导航栏+ViewPager滑动切换页面
- Android流行UI布局——底部导航(BottomNavigationView+ViewPager+Fragment)
- Android流行UI布局——底部导航(BottomNavigationView+ViewPager+Fragment)
- Android流行UI布局——底部导航(BottomNavigationView+ViewPager+Fragment)
- android 底部导航栏 ViewPager+RadioGroup+Fragment
- Fragment和ViewPager实现底部导航栏
- Android底部和标签导航栏—TabLayout+Fragment
- 底部导航栏:利用viewpager实现Android底部标题栏
- 底部导航栏:利用viewpager实现Android底部标题栏
- Android仿小米商城底部导航栏之二(BottomNavigationBar、ViewPager和Fragment的联动使用)
- RadioGroup+ViewPager制作的底部导航栏
- A
- css继承属性和无继承属性
- android 全屏幕显示以及竖屏显示
- Oracle数据库高级查询案例
- 个人界面的禁止tableview的上拉效果
- Android——ViewPager和底部导航的配合
- 序列化 和 反序列化
- 在iPython Notebook下运行 pycaffe
- java 并发学习(一)
- 一些小题目
- Java基础知识—多态
- 工作中常用的Linux命令
- python基本语法
- 细节看出基本功