package org.kymjs.music.ui.fragment; import org.kymjs.kjframe.ui.KJFragment; import org.kymjs.kjframe.ui.ViewInject; import org.kymjs.kjframe.utils.DensityUtils; import org.kymjs.music.Config; import org.kymjs.music.R; import org.kymjs.music.adapter.AbsPlayListAdapter; import org.kymjs.music.adapter.CollectListAdapter; import org.kymjs.music.adapter.FMPagerAdapter; import org.kymjs.music.adapter.MyMusicAdapter; import org.kymjs.music.ui.FMActivity; import org.kymjs.music.ui.Main; import org.kymjs.music.ui.widget.JSViewPager; import org.kymjs.music.ui.widget.ResideMenu; import org.kymjs.music.utils.ListData; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; /** * 播放列表界面 fragment * * @author kymjs */ public class MainFragment extends KJFragment { // 界面控件 private JSViewPager jsViewPager; private TextView mTextTab1, mTextTab2, mTextTab3; // 顶部图片 private int currIndex = 0;// 当前页卡编号 private ImageView mImgLine; // 侧滑界面控件 private ResideMenu resideMenu; // listView刷新广播接收器 private final RefreshAdapterReceiver receiver = new RefreshAdapterReceiver(); // ViewPager中的控件 private AbsPlayListAdapter myMusicAdp, collectAdp; // 主界面中ListView适配器 private ListView mMyMusicList, mCollectList; // Pager中的List @Override protected View inflaterView(LayoutInflater inflater, ViewGroup container, Bundle arg2) { View view = inflater.inflate(R.layout.frag_main, container, false); return view; } @Override public void initWidget(View parentView) { mTextTab1 = (TextView) parentView.findViewById(R.id.collect_title1); mTextTab2 = (TextView) parentView.findViewById(R.id.collect_title2); mTextTab3 = (TextView) parentView.findViewById(R.id.collect_title3); mTextTab1.setText("本地音乐"); mTextTab2.setText("我的收藏"); mTextTab3.setText("音乐电台"); mTextTab1.setOnClickListener(this); mTextTab2.setOnClickListener(this); mTextTab3.setOnClickListener(this); initViewPager(parentView); initImageLine(parentView, 3); resideMenu = ((Main) getActivity()).getResideMenu(); } @Override public void widgetClick(View v) { if (v == mTextTab1) { jsViewPager.setCurrentItem(0); } else if (v == mTextTab2) { jsViewPager.setCurrentItem(1); } else if (v == mTextTab3) { jsViewPager.setCurrentItem(2); } } /** * 初始化主界面ViewPager */ private void initViewPager(View parentView) { jsViewPager = (JSViewPager) parentView.findViewById(R.id.main_pager); jsViewPager.setAdapter(new MainPagerAdapter(3)); jsViewPager.setCurrentItem(1); jsViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) {} @Override public void onPageScrolled(int arg0, float arg1, int arg2) {} @Override public void onPageSelected(int arg0) { int offset = mTextTab3.getMeasuredWidth(); Animation animation = new TranslateAnimation(offset * (currIndex - 1), offset * (arg0 - 1), 0, 0); currIndex = arg0; animation.setFillAfter(true);// 图片停在动画结束位置 animation.setDuration(300); mImgLine.startAnimation(animation); resideLogic(arg0); refCollectLogic(arg0); } }); } /** * 初始化滚动线并设置滚动线的宽度 * * @param pagers * viewpager的页面数 */ private void initImageLine(View parentView, int pagers) { mImgLine = (ImageView) parentView.findViewById(R.id.collect_cursor); // 从资源获取一个bitmap Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_collect_line); // 获取设备屏幕宽度 WindowManager window = (WindowManager) getActivity().getSystemService( Context.WINDOW_SERVICE); int screenW = DensityUtils.getScreenW(getActivity()); Matrix matrix = new Matrix(); // 将宽度按(目标宽度/原宽度)放大,高度没有改变,则比例为1 matrix.postScale((screenW / pagers) / bitmap.getWidth(), 1); // 得到放大的图片 bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); // matrix.postTranslate(offset, 0);//默认显示位置 // mImgLine.setImageMatrix(matrix);// 设置动画初始位置 // 设置ImageView的图片 mImgLine.setImageBitmap(bitmap); bitmap = null; } /** * 侧滑策略 */ private void resideLogic(int arg0) { if (arg0 == 0) { resideMenu.removeIgnoredView(jsViewPager); } else { resideMenu.addIgnoredView(jsViewPager); } } /** * 刷新收藏策略 */ private void refCollectLogic(int arg0) { if (arg0 == 1 && collectAdp != null && Config.changeCollectInfo) { collectAdp.refresh(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { IntentFilter filter = new IntentFilter(); filter.addAction(Config.RECEIVER_UPDATE_MUSIC_LIST); filter.addAction(Config.RECEIVER_MUSIC_SCAN_FAIL); getActivity().registerReceiver(receiver, filter); return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onDestroy() { getActivity().unregisterReceiver(receiver); super.onDestroy(); } /** * 刷新Adapter的广播 * * @author kymjs */ public class RefreshAdapterReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Config.RECEIVER_UPDATE_MUSIC_LIST.equalsIgnoreCase(intent .getAction())) { // 我不知道为什么,调用刷新方法却没有刷新控件,好像必须销毁ListView再重新创建才能有刷新作用 // if (collectAdp != null) { // collectAdp.refresh(); // mCollectList.invalidate(); // } // if (myMusicAdp != null) { // myMusicAdp.refresh(); // mMyMusicList.invalidate(); // } myMusicAdp = new MyMusicAdapter(getActivity(), 0); mMyMusicList.setAdapter(myMusicAdp); collectAdp = new CollectListAdapter(getActivity(), 1); mCollectList.setAdapter(collectAdp); ((Main) getActivity()).lyricFragment.refreshLrcView(); } else { ViewInject.toast("呀,扫描失败了,退出再进试试?"); } } } /*************************************************************************************** * * 主界面ViewPager控件的适配器 * ***************************************************************************************/ class MainPagerAdapter extends PagerAdapter implements OnItemClickListener { private final int pagers; public MainPagerAdapter(int pagers) { super(); this.pagers = pagers; } @Override public int getCount() { return pagers; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { View mainPagerView = getPagerView(position); if (mainPagerView == null) { mainPagerView = View.inflate(getActivity(), R.layout.pager_item_main, null); } (container).addView(mainPagerView); return mainPagerView; } // 对不同的界面设置不同的适配器 private View getPagerView(int pager) { View pagerView = null; switch (pager) { case 0: mMyMusicList = (ListView) View.inflate(getActivity(), R.layout.pager_item_main, null); myMusicAdp = new MyMusicAdapter(getActivity(), pager); mMyMusicList.setAdapter(myMusicAdp); mMyMusicList.setOnItemClickListener(this); pagerView = mMyMusicList; break; case 1: mCollectList = (ListView) View.inflate(getActivity(), R.layout.pager_item_main, null); collectAdp = new CollectListAdapter(getActivity(), pager); mCollectList.setAdapter(collectAdp); mCollectList.setOnItemClickListener(this); pagerView = mCollectList; break; case 2: View fmView = View.inflate(getActivity(), R.layout.pager_item_main_fm, null); ImageView fmImg = (ImageView) fmView .findViewById(R.id.pager_img_fm); fmImg.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // startActivity(new Intent(getActivity(), // FMActivity.class)); Intent intent = new Intent(); try { getActivity().getPackageManager().getPackageInfo( "com.douban.radio", 0); intent.setComponent(new ComponentName( "com.douban.radio", "com.douban.radio.app.WelcomeActivity")); } catch (NameNotFoundException e) { intent.setClass(getActivity(), FMActivity.class); ViewInject.toast("您还未安装豆瓣FM"); e.printStackTrace(); } startActivity(intent); } }); GridView grid = (GridView) fmView .findViewById(R.id.pager_grid_fm); grid.setAdapter(new FMPagerAdapter()); pagerView = fmView; break; } return pagerView; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (((AbsPlayListAdapter) parent.getAdapter()) .getCurrentPager()) { case 0: ((Main) getActivity()).mPlayersService.play( ListData.getLocalList(getActivity()), position); break; case 1: ((Main) getActivity()).mPlayersService.play( ListData.getCollectList(getActivity()), position); break; } ((Main) getActivity()).wantScroll((Main) getActivity()); } } }