Android使用ViewPager实现导航菜单

首先设置页面的Fragment布局:

public class TabFragment extends ListFragment {    @Override    public void onViewCreated(View view, Bundle savedInstanceState) {        super.onViewCreated(view, savedInstanceState);        Bundle bundle = getArguments();        String url = bundle.getString("url");        List<String> datas = new ArrayList<>();        for (int i = 0; i < 100; i++) {            datas.add(url + "-------->" + i);        }        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout                .simple_list_item_1, datas);        setListAdapter(adapter);    }}设置ViewPager的适配器
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {    private String[] urls;

public MyFragmentPagerAdapter(FragmentManager fm, String[] urls) {        super(fm);        this.urls = urls;    }

@Override    public Fragment getItem(int position) {        Fragment fragment = new TabFragment();        Bundle bundle = new Bundle();        bundle.putString("url", urls[position]);        fragment.setArguments(bundle);        return fragment;    }

@Override    public int getCount() {        return urls.length;    }}代码:
public class TabActivity extends AppCompatActivity {    private ViewPager vp_tab;    private LinearLayout ll_title;//标题    private View v_indicator;//指示器    private int mCurrentIndex = 0;//记录当前位置    private HorizontalScrollView hsv_tab;    private String[] titles = {"社会", "军事", "娱乐", "体育", "科技", "本地", "经济", "房产"};    private String[] urls = {"社会url", "军事url", "娱乐url", "体育url", "科技url", "本地url", "经济url",            "房产url"};

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_tab);        initView();    }

private void initView() {        vp_tab = (ViewPager) findViewById(R.id.vp_tab);        hsv_tab = (HorizontalScrollView) findViewById(R.id.hsv_tab);        ll_title = (LinearLayout) findViewById(R.id.ll_title);        v_indicator = findViewById(R.id.v_indicator);        FragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),                urls);        vp_tab.setAdapter(adapter);        initTab();    }

private void initTab() {        int pixels = getResources().getDisplayMetrics().widthPixels;//获取屏幕宽度        final int titleWidth = pixels / 4;//设置标题宽度        ViewGroup.LayoutParams params = v_indicator.getLayoutParams();        params.width = titleWidth;        v_indicator.setLayoutParams(params);//给指示器设置同样的宽度        for (int i = 0; i < titles.length; i++) {            final TextView tv_title = new TextView(this);//设置标题            tv_title.setText(titles[i]);            if (i == mCurrentIndex) {                tv_title.setTextColor(Color.RED);            }            tv_title.setWidth(titleWidth);            tv_title.setGravity(Gravity.CENTER);            tv_title.setPadding(5, 5, 5, 0);            tv_title.setTag(i);//将每个标题对应页面的位置记录下来            //添加点击监听,让ViewPager跟着标题改变而改变            tv_title.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    vp_tab.setCurrentItem((int) tv_title.getTag(), false);                }            });            ll_title.addView(tv_title);//将标题的TextView添加到LinearLayout中        }        vp_tab.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int                    positionOffsetPixels) {                LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v_indicator                        .getLayoutParams();                //设置左边距                params.leftMargin = (int) ((position + positionOffset) * titleWidth);                v_indicator.setLayoutParams(params);                //让ScrollView跟随移动                hsv_tab.scrollTo(params.leftMargin - titleWidth, 0);            }

@Override            public void onPageSelected(int position) {                //将原本的TextView颜色设置成灰色,                TextView tv_title = (TextView) ll_title.getChildAt(mCurrentIndex);                tv_title.setTextColor(Color.GRAY);                mCurrentIndex = position;//获取当前页面索引                tv_title = (TextView) ll_title.getChildAt(mCurrentIndex);                //设置当前的TextView颜色为红色                tv_title.setTextColor(Color.RED);            }

@Override            public void onPageScrollStateChanged(int state) {

}        });    }

}
时间: 2024-10-07 23:38:58

Android使用ViewPager实现导航菜单的相关文章

Android 抽屉效果的导航菜单实现

抽屉效果的导航菜单 看了很多应用,觉得这种侧滑的抽屉效果的菜单很好. 不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面上一个按钮点击,菜单就滑出来,而且感觉能放很多东西. 关于实现,搜索了一下,有如下两种: 1.用SlidingDrawer: http://developer.android.com/reference/android/widget/SlidingDrawer.html 但是不知道为什么这个类官方不建议再继续用了: Deprecated since API level

Android ViewPager滑动导航菜单

不占满整个页面的滑动菜单,也可以是自动滑动广告~ package view.example.viewpagerexample; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import android.os.Bundle; import android.os.Handler; import android.os.Message; impor

Android:ViewPager扩展详解——带有导航的ViewPagerIndicator(附带图片缓存,异步加载图片)

大家都用过viewpager了, github上有对viewpager进行扩展,导航风格更加丰富,这个开源项目是ViewPagerIndicator,很好用,但是例子比较简单,实际用起来要进行很多扩展,比如在fragment里进行图片缓存和图片异步加载. 下面是ViewPagerIndicator源码运行后的效果,大家也都看过了,我多此一举截几张图: 下载源码请点击这里 ===========================================华丽的分割线==============

Android仿小米商城底部导航栏之二(BottomNavigationBar、ViewPager和Fragment的联动使用)

简介 在前文<Android仿小米商城底部导航栏(基于BottomNavigationBar)>我们使用BottomNavigationBar控件模仿实现了小米商城底部导航栏效果.接下来更进一步的,我们将通过BottomNavigationBar控件和ViewPager空间的联动使用来实现主界面的滑动导航. 导航是移动应用最重要的方面之一,对用户体验是良好还是糟糕起着至关重要的作用.好的导航可以让一款应用更加易用并且让用户快速上手.相反,糟糕的应用导航很容易让人讨厌,并遭到用户的抛弃.为了打造

Android实现下拉导航选择菜单效果【转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/07/31/2617488.html】

本文介绍在Android中如何实现下拉导航选择菜单效果.   关于下拉导航选择菜单效果在新闻客户端中用的比较多,当然也可以用在其他的项目中,这样可以很方便的选择更多的菜单.我们可以让我们的应用顶部有左右滑动或进行切换的导航菜单,也可以为了增强用户体验在应用中添加这样的下拉导航选择菜单效果. 关于它的实现原理,其实也是挺简单的,就是使用PopupWindow来进行展现,在显示时控制其高度并配置以相应的动画效果.在PopupWindow中我使用GridView来控制里面的菜单项,每个菜单项对应相应的

Android实现下拉导航选择菜单效果(转)

本文转载自互联网 关于下拉导航选择菜单效果在新闻客户端中用的比较多,当然也可以用在其他的项目中,这样可以很方便的选择更多的菜单.我们可以让我们的应用顶部有左右滑动或进行切换的导航菜单,也可以为了增强用户体验在应用中添加这样的下拉导航选择菜单效果. 关于它的实现原理,其实也是挺简单的,就是使用PopupWindow来进行展现,在显示时控制其高度并配置以相应的动画效果.在PopupWindow中我使用GridView来控制里面的菜单项,每个菜单项对应相应的图片和文字.当然了,也有其他的实现方式.为了

android开发(38) 使用 DrawerLayou t实现左侧抽屉式导航菜单

最近流行 左侧抽屉式的导航条菜单,知乎,360,QQ都使用了这样的导航菜单,我们也了解下: Android Design 的流行趋势:Navigation Drawer 导航抽屉 参考这篇文章:http://www.geekpark.net/topics/183724 效果图:                 特点 1.标题栏(或者actionBar) 做的有个 菜单图标按钮(三条线或者其他).一般这样的标题栏左侧和右侧都会有图标按钮.如图1所示. 2.点击图标按钮 从左侧向右 慢慢退出一个 菜

Android 滑动导航菜单的快速构建(二) Material Design

原创文章,转载请注明 ( 来自:http://blog.csdn.net/leejizhou/article/details/52046748 李济洲的博客 ) 上一篇 http://blog.csdn.net/leejizhou/article/details/52013343 介绍了几个滑动导航菜单效果的快速构建,这篇文章来总结"当下"如何按照Android的设计标准去设计滑动导航菜单,我为什么说的"当下"呢?因为这个设计标准是会变的. 在material de

android.support.v4.widget.DrawerLayout 抽屉效果导航菜单

抽屉效果导航菜单图示 如图所示,抽屉效果的导航菜单不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面左上角的一个按钮点击,菜单就滑出来,而且感觉能放很多东西 概况:实现上图所示的抽屉效果的导航菜单有以下两种方式 方式1.用SlidingDrawer: http://developer.android.com/reference/android/widget/SlidingDrawer.html 但是不知道为什么这个类官方不建议再继续用了: Deprecated since API lev