Android音乐播放器 -- 滑动切换实现

因为之前播放器 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);
	}


3. 配置ViewPager

private void setUpViewPager() {
		// TODO Auto-generated method stub
		//配置 ViewPager
		mViewPagerAdapter = 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
		}

		@Override
		public 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);
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return TAB_INDEX_COUNT;
		}
    	
		@Override
		public 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 stub
		final ActionBar actionBar = getActionBar();
    	for (int i = 0; i < mViewPagerAdapter.getCount(); ++i) {
    		actionBar.addTab(actionBar.newTab()
    				.setText(mViewPagerAdapter.getPageTitle(i))
    				.setTabListener(this));
    	}
}

最后,有兴趣的同学,可以到 这里 下载源码

谢谢





你可能感兴趣的:(android,音乐播放器)