Android音乐播放器 -- 滑动切换实现
16lz
2021-01-24
因为之前播放器Android音乐播放器是切换列表需要手动去点击Tittle Tab,感觉不方便,所以今天就做了一点修改,可以通过左右滑动 list 来实现切换,效果如下图:
改造的关键在于FragmentStatePagerAdapter 的使用,详情我们接下来介绍
我们修改的文件都是在MainActivity.java,点击切换版本的源码,请猛戳这里下载
1. onCreate 中添加相关配置
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);MusicInfos = CursorHandle.getMusicInfos(MainActivity.this);//注册广播接收器registerReceiver();//初始化布局initView();//设置actionbar样式setUpActionBar();//创建ViewPager setUpViewPager(); setUpTabs();}
2. setUpActionBar对Actionbar进行配置
private void setUpActionBar() {// TODO Auto-generated method stub//配置actionbar样式 final ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayShowHomeEnabled(false);}
private void setUpViewPager() {// TODO Auto-generated method stub//配置 ViewPagermViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); mViewPager = (ViewPager)findViewById(R.id.musiclist); mViewPager.setAdapter(mViewPagerAdapter); mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { final ActionBar actionBar = getActionBar(); //选择索引项目 actionBar.setSelectedNavigationItem(position); } @Override public void onPageScrollStateChanged(int state) { switch(state) { case ViewPager.SCROLL_STATE_IDLE: //TODO break; case ViewPager.SCROLL_STATE_DRAGGING: //TODO break; case ViewPager.SCROLL_STATE_SETTLING: //TODO break; default: //TODO break; } } });}
4.添加ViewPagerAdapt 继承自FragmentStatePagerAdapter
public class ViewPagerAdapter extends FragmentStatePagerAdapter {public ViewPagerAdapter(FragmentManager fm) {super(fm);// TODO Auto-generated constructor stub}@Overridepublic ListFragment getItem(int position) {// TODO Auto-generated method stub//让tab和 fragment对应switch (position) {case TAB_INDEX_MYSONG:return mysongFragment;case TAB_INDEX_SINGER:return singerFragment;case TAB_INDEX_ALBUM:return albumFragment;}throw new IllegalStateException("No fragment at position " + position);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn TAB_INDEX_COUNT;} @Overridepublic CharSequence getPageTitle(int position) {String tabLabel = null;switch (position) {case TAB_INDEX_MYSONG:tabLabel = getString(R.string.mysong);break;case TAB_INDEX_SINGER:tabLabel = getString(R.string.singer);break;case TAB_INDEX_ALBUM:tabLabel = getString(R.string.album);break;}return tabLabel;} }主要是进行Tab 和 fragment的匹配,以及 tab tittle的设定
最后 ,我们需要是设置Tab,以及action监听
private void setUpTabs() {// TODO Auto-generated method stubfinal ActionBar actionBar = getActionBar(); for (int i = 0; i < mViewPagerAdapter.getCount(); ++i) { actionBar.addTab(actionBar.newTab() .setText(mViewPagerAdapter.getPageTitle(i)) .setTabListener(this)); }}
最后,有兴趣的同学,可以到 这里 下载源码
谢谢
更多相关文章
- Android设计模式系列(9)--SDK源码之适配器模式
- 安卓开发到底是什么
- android 呼吸灯实现源码
- 各种android应用模仿源码
- 下载频道2013年超人气精华资源汇总---全都是免积分下载
- Android(安卓)Studio开发Groovy
- Android(安卓)ListView圆角实现
- 其实android也可以使用jetty的comet客户端
- Android原生(Native)C开发之九:OpenGL ES初探