重写ViewPager实现Android导航栏
来源:互联网 发布:java actionperformed 编辑:程序博客网 时间:2024/05/29 09:35
最后实现的效果大概是这个样子的
要实现这个效果首先要重写一个PageAdapter
1.PageAdapter
package com.example.noname.learnrecord;/** * Created by NonAme on 2017/5/8. */import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import java.util.List;public class PageAdapter extends PagerAdapter { private List<View> mViews; public PageAdapter(List<View> mViews) { this.mViews = mViews; } /** * 重写四个方法 boolean isViewFromObject(View arg0, Object arg1) int getCount() * void destroyItem(ViewGroup container, int position,Object object) Object * instantiateItem(ViewGroup container, int position) */ // 从当前container中删除指定位置的view @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mViews.get(position)); } // 初始化view @Override public Object instantiateItem(ViewGroup container, int position) { View view = mViews.get(position); container.addView(view); return view; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } // 返回要滑动的view个数 @Override public int getCount() { return mViews.size(); }}然后把需要用的页面放入一个List里面在把这个List放入Adapter中,将ViewPager和Adapter关联起来就可以实现效果了。附上MainActivity的代码
2.MainActivity
package com.example.noname.learnrecord;import android.app.ProgressDialog;import android.content.Intent;import android.os.Handler;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.Button;import android.widget.ImageButton;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ViewPager mViewPager; private List<View> mViews=new ArrayList<>(); private PageAdapter mAdapter=new PageAdapter(mViews); private int currentIndex=0; // Tab private LinearLayout mTabToday, mTabList, mTabShop, mTabMsg; private ImageButton mTodayImg, mListImg, mShopImg, mMsgImg; //Top Button btnSearch,btnUserInfo; TextView tvtoptitle; PopupWindow mPopWindow; private void initEvents() { mTabToday.setOnClickListener(this); mTabList.setOnClickListener(this); mTabShop.setOnClickListener(this); mTabMsg.setOnClickListener(this); btnSearch.setOnClickListener(this); btnUserInfo.setOnClickListener(this); //滑动切换页面 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int arg0) { resetImg(); //将图片全部默认为不选中 int currentItem = mViewPager.getCurrentItem(); switch (currentItem) { case 0:// initFirstEvent(); mTodayImg.setBackgroundResource(R.drawable.nav_today_after); tvtoptitle.setText("今日"); break; case 1: mListImg.setBackgroundResource(R.drawable.nav_list_after); tvtoptitle.setText("清单"); break; case 2: mShopImg.setBackgroundResource(R.drawable.nav_shop_after); tvtoptitle.setText("商城"); break; case 3: mMsgImg.setBackgroundResource(R.drawable.nav_info_after); tvtoptitle.setText("消息"); break; default: break; } currentIndex=currentItem; } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); } //实例化控件 //以及四个界面的空间 private void initView() { mViewPager = (ViewPager) findViewById(R.id.id_viewpager); // Tab mTabToday = (LinearLayout) findViewById(R.id.tab_today); mTabList = (LinearLayout) findViewById(R.id.tab_list); mTabShop = (LinearLayout) findViewById(R.id.tab_shop); mTabMsg = (LinearLayout) findViewById(R.id.tab_msg); // img mTodayImg = (ImageButton) findViewById(R.id.tab_today_img); mListImg = (ImageButton) findViewById(R.id.tab_list_img); mShopImg = (ImageButton) findViewById(R.id.tab_shop_img); mMsgImg= (ImageButton) findViewById(R.id.tab_msg_img); //Top btnSearch=(Button)findViewById(R.id.btn_search); btnUserInfo=(Button)findViewById(R.id.btn_user_info); //TopTop tvtoptitle=(TextView)findViewById(R.id.tv_top_title); LayoutInflater mInflater = LayoutInflater.from(this); View tab01 = mInflater.inflate(R.layout.main_layout1, null); View tab02 = mInflater.inflate(R.layout.main_layout2, null); View tab03 = mInflater.inflate(R.layout.main_layout3, null); View tab04 = mInflater.inflate(R.layout.main_layout4, null); mViews.add(tab01); mViews.add(tab02); mViews.add(tab03); mViews.add(tab04);// btnAddList= (Button)tab01.findViewById(R.id.btn_add_list); 可以通过findViewById设置每个layout里面的事件 mViewPager.setAdapter(mAdapter); } //点击事件 @Override public void onClick(View view) { resetImg(); switch (view.getId()) { case R.id.tab_today: mViewPager.setCurrentItem(0);// 跳到第一个页面 mTodayImg.setBackgroundResource(R.drawable.nav_today_after);// 图片变为选中 tvtoptitle.setText("今日"); break; case R.id.tab_list: mViewPager.setCurrentItem(1); mListImg.setBackgroundResource(R.drawable.nav_list_after); btnUserInfo.setPivotX(1); tvtoptitle.setText("清单"); break; case R.id.tab_shop: mViewPager.setCurrentItem(2); mShopImg.setBackgroundResource(R.drawable.nav_shop_after); tvtoptitle.setText("商城"); break; case R.id.tab_msg: mViewPager.setCurrentItem(3); mMsgImg.setBackgroundResource(R.drawable.nav_info_after); tvtoptitle.setText("消息"); break; default: break; } } // 将所有的图片切换为未选中 private void resetImg() { mTodayImg.setBackgroundResource(R.drawable.nav_today_befo); mListImg.setBackgroundResource(R.drawable.nav_list_befo); mShopImg.setBackgroundResource(R.drawable.nav_shop_befo); mMsgImg.setBackgroundResource(R.drawable.nav_info_befo); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initEvents(); }}3.Top.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="#80cdea" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="今日" android:id="@+id/tv_top_title" android:layout_marginLeft="10dp" android:textColor="#ffffff" android:textSize="20sp" android:layout_gravity="center_vertical" android:textStyle="bold" /> <Button android:layout_width="25dp" android:layout_height="25dp" android:layout_marginLeft="60dp" android:layout_gravity="center_vertical" android:background="@drawable/nav_search_pic" android:id="@+id/btn_search"/> <Button android:layout_width="30dp" android:layout_height="30dp" android:background="@drawable/nav_person" android:layout_gravity="center_vertical" android:onClick="popmenu" android:id="@+id/btn_user_info" android:layout_marginLeft="180dp"/></LinearLayout>4.Bottom.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="55dp" android:background="#ffffff" android:orientation="horizontal" > <!-- ImageButton没加android:clickable="false"时,点击下方的ImageBuutton不会改变页面,点击TextView才会改变页面,这是因为每个tab是一个LinearLayout,每个LinearLayout都有一个ImageButton,当点击ImageButton位置时,点击事件首先会到LinearLayout上,LinearLayout会去判断,发现内部有一个ImageButton可以解决点击事件,所以就把点击事件交给ImageButton,而ImageButton又没有写点击事件,所以点击事件就失效了。--> <LinearLayout android:id="@+id/tab_today" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical" > <ImageButton android:id="@+id/tab_today_img" android:layout_width="25dp" android:layout_height="25dp" android:layout_gravity="center" android:clickable="false" android:background="@drawable/nav_today_after" /> </LinearLayout> <LinearLayout android:id="@+id/tab_list" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical" > <ImageButton android:id="@+id/tab_list_img" android:layout_width="25dp" android:layout_height="25dp" android:clickable="false" android:background="@drawable/nav_list_befo"/> </LinearLayout> <LinearLayout android:id="@+id/tab_shop" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical" > <ImageButton android:id="@+id/tab_shop_img" android:layout_width="25dp" android:layout_height="25dp" android:background="@drawable/nav_shop_befo" android:clickable="false" /> </LinearLayout> <LinearLayout android:id="@+id/tab_msg" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical" > <ImageButton android:id="@+id/tab_msg_img" android:layout_width="25dp" android:layout_height="25dp" android:background="@drawable/nav_info_befo" android:clickable="false" /> </LinearLayout></LinearLayout>
阅读全文
0 0
- 重写ViewPager实现Android导航栏
- Android学习-ViewPager实现导航
- 重写view实现viewpager下导航圆点
- 底部导航栏(自定义View+ViewPager实现) android项目详解
- Android底部导航栏实现(四)之TabLayout+ViewPager
- Android Material design 中TabLayout+Viewpager实现导航栏
- Android 用 TabLayout + ViewPager + Fragment 实现顶部、底部导航栏
- Android中导航栏实现(Fragment+ViewPager+TabLayout)
- 【Android】Fragment+Viewpager实现底部导航栏(带小红点)
- 底部导航栏:利用viewpager实现Android底部标题栏
- 底部导航栏:利用viewpager实现Android底部标题栏
- Android ViewPager+TabHost实现首页导航
- 使用ViewPager实现Android帮助导航
- android 重写 viewpager
- ViewPager+fragment实现滑动导航栏
- 初学自定义view实现viewpager导航栏
- FragmentTabHost+viewPager实现底部导航栏
- Fragment和ViewPager实现底部导航栏
- Python学习笔记之常用的内置函数
- hdu1004 -Let the Balloon Rise
- TCP/IP之IP协议(网际协议)
- java中的static
- PHP 多列排序,不需要整天构建列数组.
- 重写ViewPager实现Android导航栏
- JNI开发之访问java对象非静态属性和静态属性
- require.js的基本用法
- 学习笔记2017.07.03-day1,pm-HTML属性-HTML标题-HTML注释-HTML段落-HTML
- ubuntu postgresql 安装 数据存储路径更改
- Hbase性能测试2, 预分区
- Servlet的线程安全
- 按照单词的字母是否相同对字符串数组进行分组
- 树、森林和二叉树之间的转换