天天看點

Android音樂播放器 -- 滑動切換實作

因為之前播放器 Android音樂播放器 是切換清單需要手動去點選Tittle Tab,感覺不友善,是以今天就做了一點修改,可以通過左右滑動 list 來實作切換,效果如下圖:

Android音樂播放器 -- 滑動切換實作

改造的關鍵在于 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));
    	}
}
           

最後,有興趣的同學,可以到 這裡 下載下傳源碼

謝謝

繼續閱讀