新手向!开源音乐播放器JamsMusicPlayer源码解析<1>

上一次大体总结了准备工作。
现在且来看看这个开源播放器中到底是怎么样工作的。
首先看到了WelcomeActivity这个包。这个应该是一开始的时候的欢迎和设置界面。
打开一看!呀!熟悉的Fragment!
WelcomeActivity
从WelcomeActivity入手,有以下几个部分比较重要。
【注:为了阅读方便,这些代码并不是进行了筛选和排序】

//indicator的部分
//ViewPagerIndicator的用例在这里
//https://github.com/JakeWharton/ViewPagerIndicator

    private ViewPager welcomeViewPager;//Fragment中载体
    private LinePageIndicator indicator;
    indicator = (LinePageIndicator) findViewById(R.id.indicator);
    indicator.setViewPager(welcomeViewPager);//这里将welcomViewPager传入给indicator

    final float density = getResources().getDisplayMetrics().density;//这里是说屏幕密度,即dpi/
    indicator.setSelectedColor(0x880099CC);
    indicator.setUnselectedColor(0xFF4F4F4F);
    indicator.setStrokeWidth(2 * density);
    indicator.setLineWidth(30 * density);
        indicator.setOnPageChangeListener(pageChangeListener);//为其设置翻页监听器

//page的监听器部分
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {

                @Override
                public void onPageScrollStateChanged(int scrollState) {
                    // TODO Auto-generated method stub

                }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageSelected(int page) {

            /* If the user swiped away from the music folders 
             * selection fragment, save the music folders to 
             * the database.
             */
            if (page==0 || page==2) {
            //请注意一下这里。这个类看起来很像AsyncTask
                new AsyncSaveMusicFoldersTask(mContext.getApplicationContext(), 
                                              mMusicFoldersFragment.getMusicFoldersSelectionFragment()
                                                                   .getMusicFoldersHashMap())
                                             .execute();
            }

            /* If the user scrolls away from the Google Play Music page and 
             * they have selected an account, check if the default Google Play 
             * Music app is installed. */
            if (page==3) {
                //获取Common中的一些信息
                if (mApp.getSharedPreferences().getBoolean("GOOGLE_PLAY_MUSIC_ENABLED", false)==true) {
                    //Check if the Google Play Music app is installed.
                    PackageManager pm = mContext.getPackageManager();
                    boolean installed = false;
                    try {
                        pm.getPackageInfo("com.google.android.music", PackageManager.GET_ACTIVITIES);
                        installed = true;
                    } catch (NameNotFoundException e1) {
                        //The app isn't installed.
                        installed = false;
                    }

                    if (installed==false) {
                        //Prompt the user to install Google Play Music.
                        promptUserInstallGooglePlayMusic();
                    }

                }

            }

            //Launch the scanning AsyncTask.
            if (page==5)
                showBuildingLibraryProgress();

        }

    };

这样,indicator之中就拥有了PagerView对象及监听器
【AsyncTask】这一个类笔者去网上找资料看了看,觉得有必要在这里插播一下,这个类非常有用,而且是在进行一些耗时较短的任务时。笔者在这里令开一篇。
【笔者大致察看了一下indicator中的逻辑,觉得今后可以另起一问,这里就先不赘述了】

版权声明:本文为博主原创文章,转载请标明出处。

posted @ 2015-04-29 11:34  Fridge  阅读(476)  评论(0编辑  收藏  举报