package com.wm.remusic.fragmentnet; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ImageSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.common.ResizeOptions; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.wm.remusic.MainApplication; import com.wm.remusic.R; import com.wm.remusic.activity.AlbumsDetailActivity; import com.wm.remusic.activity.NetItemChangeActivity; import com.wm.remusic.activity.PlaylistActivity; import com.wm.remusic.activity.RadioDetailActivity; import com.wm.remusic.fragment.AttachFragment; import com.wm.remusic.json.RecommendListNewAlbumInfo; import com.wm.remusic.json.RecommendListRadioInfo; import com.wm.remusic.json.RecommendListRecommendInfo; import com.wm.remusic.net.HttpUtil; import com.wm.remusic.net.NetworkUtils; import com.wm.remusic.uitl.PreferencesUtility; import com.wm.remusic.widget.LoodView; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; /** * Created by wm on 2016/4/9. */ public class RecommendFragment extends AttachFragment { private RecyclerView mRecyclerView1, mRecyclerView2, mRecyclerView3; private GridLayoutManager mGridLayoutManager, mGridLayoutManager2, mGridLayoutManager3; private RecommendAdapter mRecomendAdapter; private NewAlbumsAdapter mNewAlbumsAdapter; private RadioAdapter mRadioAdapter; private ArrayList<RecommendListRecommendInfo> mRecomendList = new ArrayList<>(); private ArrayList<RecommendListNewAlbumInfo> mNewAlbumsList = new ArrayList<>(); private ArrayList<RecommendListRadioInfo> mRadioList = new ArrayList<>(); private int width = 160, height = 160; private LinearLayout mItemLayout ,mViewContent;; private LayoutInflater mLayoutInflater; private View mLoadView, v1, v2, v3; private HashMap<String, View> mViewHashMap; private String mPosition; private ChangeView mChangeView; private boolean isFromCache = true; private boolean isDayFirst; private ViewGroup mContent; private View mRecommendView; private LoodView mLoodView; public void setChanger(ChangeView changer) { mChangeView = changer; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mContent = (ViewGroup) inflater.inflate(R.layout.fragment_recommend_container, container, false); mLayoutInflater = LayoutInflater.from(mContext); mRecommendView = mLayoutInflater.inflate(R.layout.recommend,container,false); String date = Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + ""; TextView dailyText = (TextView) mRecommendView.findViewById(R.id.daily_text); dailyText.setText(date); mItemLayout = (LinearLayout) mRecommendView.findViewById(R.id.item_change); mViewContent = (LinearLayout) mRecommendView.findViewById(R.id.recommend_layout); if(!PreferencesUtility.getInstance(mContext).isCurrentDayFirst(date)){ PreferencesUtility.getInstance(mContext).setCurrentDate(date); View dayRec = mLayoutInflater.inflate(R.layout.loading_daymusic,container,false); ImageView view1 = (ImageView) dayRec.findViewById(R.id.loading_dayimage) ; RotateAnimation rotateAnimation = new RotateAnimation(0,360, 1, 0.5F, 1, 0.5F ); rotateAnimation.setDuration(20000L); rotateAnimation.setInterpolator(new LinearInterpolator()); rotateAnimation.setRepeatCount(Animation.INFINITE); rotateAnimation.setRepeatMode(Animation.INFINITE); view1.startAnimation(rotateAnimation); isDayFirst = true; mContent.addView(dayRec); } mLoadView = mLayoutInflater.inflate(R.layout.loading, null, false); mItemLayout.setVisibility(View.INVISIBLE); mViewContent.addView(mLoadView); mRecomendAdapter = new RecommendAdapter(null); mNewAlbumsAdapter = new NewAlbumsAdapter(null); mRadioAdapter = new RadioAdapter(null); TextView change = (TextView) mRecommendView.findViewById(R.id.change_item_position); change.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent itent = new Intent(mContext, NetItemChangeActivity.class); mContext.startActivity(itent); } }); mLoodView = (LoodView) mRecommendView.findViewById(R.id.loop_view); if(!isDayFirst){ mContent.addView(mRecommendView); } return mContent; } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ if(mLoodView != null) mLoodView.requestFocus(); } } public void requestData(){ reloadAdapter(); } private void reloadAdapter() { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { if (NetworkUtils.isConnectInternet(mContext)) { isFromCache = false; } //推荐电台 try { JsonObject list = HttpUtil.getResposeJsonObject("http://tingapi.ting.baidu.com/v1/restserver/ting?from=android&version=5.8.1.0&channel=ppzs&operator=3&method=baidu.ting.plaza.index&cuid=89CF1E1A06826F9AB95A34DC0F6AAA14" , mContext, isFromCache); JsonObject object = list.get("result").getAsJsonObject(); JsonArray radioArray = object.get("radio").getAsJsonObject().get("result").getAsJsonArray(); JsonArray recommendArray = object.get("diy").getAsJsonObject().get("result").getAsJsonArray(); JsonArray newAlbumArray = object.get("mix_1").getAsJsonObject().get("result").getAsJsonArray(); for (int i = 0; i < 6; i++) { mRecomendList.add(MainApplication.gsonInstance().fromJson(recommendArray.get(i), RecommendListRecommendInfo.class)); mNewAlbumsList.add(MainApplication.gsonInstance().fromJson(newAlbumArray.get(i), RecommendListNewAlbumInfo.class)); mRadioList.add(MainApplication.gsonInstance().fromJson(radioArray.get(i), RecommendListRadioInfo.class)); } } catch (NullPointerException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void v) { v1 = mLayoutInflater.inflate(R.layout.recommend_playlist, mViewContent, false); mRecyclerView1 = (RecyclerView) v1.findViewById(R.id.recommend_playlist_recyclerview); mGridLayoutManager = new GridLayoutManager(mContext, 3); mRecyclerView1.setLayoutManager(mGridLayoutManager); mRecyclerView1.setAdapter(mRecomendAdapter); mRecyclerView1.setHasFixedSize(true); TextView more = (TextView) v1.findViewById(R.id.more); more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mChangeView.changeTo(1); } }); v2 = mLayoutInflater.inflate(R.layout.recommend_newalbums, mViewContent, false); mRecyclerView2 = (RecyclerView) v2.findViewById(R.id.recommend_newalbums_recyclerview); mGridLayoutManager2 = new GridLayoutManager(mContext, 3); mRecyclerView2.setLayoutManager(mGridLayoutManager2); mRecyclerView2.setAdapter(mNewAlbumsAdapter); mRecyclerView2.setHasFixedSize(true); v3 = mLayoutInflater.inflate(R.layout.recommend_radio, mViewContent, false); mRecyclerView3 = (RecyclerView) v3.findViewById(R.id.recommend_radio_recyclerview); mGridLayoutManager3 = new GridLayoutManager(mContext, 3); mRecyclerView3.setLayoutManager(mGridLayoutManager3); mRecyclerView3.setAdapter(mRadioAdapter); mRecyclerView3.setHasFixedSize(true); mRecomendAdapter.update(mRecomendList); mNewAlbumsAdapter.update(mNewAlbumsList); mRadioAdapter.update(mRadioList); mViewHashMap = new HashMap<>(); mViewHashMap.put("推荐歌单", v1); mViewHashMap.put("最新专辑", v2); mViewHashMap.put("主播电台", v3); mPosition = PreferencesUtility.getInstance(mContext).getItemPosition(); mViewContent.removeView(mLoadView); if(isDayFirst){ mContent.removeAllViews(); mContent.addView(mRecommendView); } addViews(); mItemLayout.setVisibility(View.VISIBLE); } }.execute(); } class LoadRecommend extends AsyncTask<Integer, Void, Integer> { @Override protected Integer doInBackground(Integer... params) { if (NetworkUtils.isConnectInternet(mContext)) { isFromCache = false; } //推荐电台 try { JsonObject list = HttpUtil.getResposeJsonObject("http://tingapi.ting.baidu.com/v1/restserver/ting?from=android&version=5.8.1.0&channel=ppzs&operator=3&method=baidu.ting.plaza.index&cuid=89CF1E1A06826F9AB95A34DC0F6AAA14" , mContext, isFromCache); JsonObject object = list.get("result").getAsJsonObject(); JsonArray radioArray = object.get("radio").getAsJsonObject().get("result").getAsJsonArray(); JsonArray recommendArray = object.get("diy").getAsJsonObject().get("result").getAsJsonArray(); JsonArray newAlbumArray = object.get("mix_1").getAsJsonObject().get("result").getAsJsonArray(); for (int i = 0; i < 6; i++) { mRecomendList.add(MainApplication.gsonInstance().fromJson(recommendArray.get(i), RecommendListRecommendInfo.class)); mNewAlbumsList.add(MainApplication.gsonInstance().fromJson(newAlbumArray.get(i), RecommendListNewAlbumInfo.class)); mRadioList.add(MainApplication.gsonInstance().fromJson(radioArray.get(i), RecommendListRadioInfo.class)); } } catch (NullPointerException e) { e.printStackTrace(); } return params[0]; } @Override protected void onPostExecute(Integer tryCount) { if (mRecomendList.size() != 6 && mNewAlbumsList.size() != 6 && mRadioList.size() != 6) { if (tryCount < 5) { tryCount++; new LoadRecommend().execute(tryCount); } else { Toast.makeText(mContext, "网络连接失败", Toast.LENGTH_SHORT).show(); View tryAgain = LayoutInflater.from(mContext).inflate(R.layout.try_again, mViewContent, false); tryAgain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new LoadRecommend().execute(0); } }); mViewContent.removeView(mLoadView); mViewContent.addView(tryAgain); } } v1 = mLayoutInflater.inflate(R.layout.recommend_playlist, mViewContent, false); mRecyclerView1 = (RecyclerView) v1.findViewById(R.id.recommend_playlist_recyclerview); mGridLayoutManager = new GridLayoutManager(mContext, 3); mRecyclerView1.setLayoutManager(mGridLayoutManager); mRecyclerView1.setAdapter(mRecomendAdapter); TextView more = (TextView) v1.findViewById(R.id.more); more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mChangeView.changeTo(1); } }); v2 = mLayoutInflater.inflate(R.layout.recommend_newalbums, mViewContent, false); mRecyclerView2 = (RecyclerView) v2.findViewById(R.id.recommend_newalbums_recyclerview); mGridLayoutManager2 = new GridLayoutManager(mContext, 3); mRecyclerView2.setLayoutManager(mGridLayoutManager2); mRecyclerView2.setAdapter(mNewAlbumsAdapter); v3 = mLayoutInflater.inflate(R.layout.recommend_radio, mViewContent, false); mRecyclerView3 = (RecyclerView) v3.findViewById(R.id.recommend_radio_recyclerview); mGridLayoutManager3 = new GridLayoutManager(mContext, 3); mRecyclerView3.setLayoutManager(mGridLayoutManager3); mRecyclerView3.setAdapter(mRadioAdapter); mRecomendAdapter.update(mRecomendList); mNewAlbumsAdapter.update(mNewAlbumsList); mRadioAdapter.update(mRadioList); mViewHashMap = new HashMap<>(); mViewHashMap.put("推荐歌单", v1); mViewHashMap.put("最新专辑", v2); mViewHashMap.put("主播电台", v3); mPosition = PreferencesUtility.getInstance(mContext).getItemPosition(); mViewContent.removeView(mLoadView); addViews(); mItemLayout.setVisibility(View.VISIBLE); } } private void addViews() { String[] strs = mPosition.split(" "); for (int i = 0; i < strs.length; i++) { mViewContent.addView(mViewHashMap.get(strs[i])); } } @Override public void onResume() { super.onResume(); if (mPosition == null) { return; } String st = PreferencesUtility.getInstance(mContext).getItemPosition(); if (!st.equals(mPosition)) { mPosition = st; mViewContent.removeAllViews(); addViews(); } } @Override public void onDestroy() { super.onDestroy(); mLoodView.onDestroy(); } @Override public void onDestroyView() { super.onDestroyView(); } class RecommendAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private ArrayList<RecommendListRecommendInfo> mList; SpannableString spanString; public RecommendAdapter(ArrayList<RecommendListRecommendInfo> list) { Bitmap b = BitmapFactory.decodeResource(getResources(), R.mipmap.index_icn_earphone); ImageSpan imgSpan = new ImageSpan(mContext, b, ImageSpan.ALIGN_BASELINE); spanString = new SpannableString("icon"); spanString.setSpan(imgSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); mList = list; } public void update(ArrayList<RecommendListRecommendInfo> list) { mList = list; notifyDataSetChanged(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); ItemView viewholder = new ItemView(layoutInflater.inflate(R.layout.recommend_playlist_item, parent, false)); return viewholder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { final RecommendListRecommendInfo info = mList.get(position); ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(info.getPic())) .setResizeOptions(new ResizeOptions(width, height)) .build(); DraweeController controller = Fresco.newDraweeControllerBuilder() .setOldController(((ItemView) holder).art.getController()) .setImageRequest(request) .build(); ((ItemView) holder).art.setController(controller); ((ItemView) holder).name.setText(info.getTitle()); ((ItemView) holder).count.setText(spanString); int count = Integer.parseInt(info.getListenum()); if (count > 10000) { count = count / 10000; ((ItemView) holder).count.append(" " + count + "万"); } else { ((ItemView) holder).count.append(" " + info.getListenum()); } ((ItemView) holder).itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, PlaylistActivity.class); intent.putExtra("playlistid", info.getListid()); intent.putExtra("islocal", false); intent.putExtra("albumart", info.getPic()); intent.putExtra("playlistname", info.getTitle()); intent.putExtra("playlistDetail", info.getTag()); intent.putExtra("playlistcount", info.getListenum()); mContext.startActivity(intent); } }); } @Override public int getItemCount() { if (mList == null) { return 0; } if (mList.size() < 7) { return mList.size(); } else { return 6; } } class ItemView extends RecyclerView.ViewHolder { private SimpleDraweeView art; private TextView name, count; public ItemView(View itemView) { super(itemView); art = (SimpleDraweeView) itemView.findViewById(R.id.playlist_art); name = (TextView) itemView.findViewById(R.id.playlist_name); count = (TextView) itemView.findViewById(R.id.playlist_listen_count); } } } class RadioAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private ArrayList<RecommendListRadioInfo> mList; public RadioAdapter(ArrayList<RecommendListRadioInfo> list) { mList = list; } public void update(ArrayList<RecommendListRadioInfo> list) { mList = list; notifyDataSetChanged(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); ItemView viewholder = new ItemView(layoutInflater.inflate(R.layout.recommend_newalbums_item, parent, false)); return viewholder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { final RecommendListRadioInfo info = mList.get(position); ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(info.getPic())) .setResizeOptions(new ResizeOptions(width, height)) .build(); DraweeController controller = Fresco.newDraweeControllerBuilder() .setOldController(((ItemView) holder).art.getController()) .setImageRequest(request) .build(); ((ItemView) holder).art.setController(controller); // ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(info.getPic())) // .setResizeOptions(new ResizeOptions(width, height)) // .build(); // DraweeController controller = Fresco.newDraweeControllerBuilder() // .setOldController(((ItemView) holder).art.getController()) // .setImageRequest(request) // .build(); // ((ItemView) holder).art.setController(controller); ((ItemView) holder).albumName.setText(info.getTitle()); ((ItemView) holder).artsit.setText(info.getDesc()); ((ItemView) holder).itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, RadioDetailActivity.class); intent.putExtra("albumid", info.getAlbum_id()); intent.putExtra("albumart", info.getPic()); intent.putExtra("albumname", info.getTitle()); intent.putExtra("artistname", info.getDesc()); mContext.startActivity(intent); } }); } @Override public int getItemCount() { if (mList == null) { return 0; } if (mList.size() < 7) { return mList.size(); } else { return 6; } } class ItemView extends RecyclerView.ViewHolder implements View.OnClickListener { private SimpleDraweeView art; private TextView albumName, artsit; public ItemView(View itemView) { super(itemView); art = (SimpleDraweeView) itemView.findViewById(R.id.album_art); albumName = (TextView) itemView.findViewById(R.id.album_name); artsit = (TextView) itemView.findViewById(R.id.artist_name); } @Override public void onClick(View v) { } } } class NewAlbumsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private ArrayList<RecommendListNewAlbumInfo> mList; public NewAlbumsAdapter(ArrayList<RecommendListNewAlbumInfo> list) { mList = list; } public void update(ArrayList<RecommendListNewAlbumInfo> list) { mList = list; notifyDataSetChanged(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); ItemView viewholder = new ItemView(layoutInflater.inflate(R.layout.recommend_newalbums_item, parent, false)); return viewholder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { final RecommendListNewAlbumInfo info = mList.get(position); // ImageRequest imageRequest = ImageRequest.fromUri(info.coverImgUrl); // CacheKey cacheKey= DefaultCacheKeyFactory.getInstance() // .getEncodedCacheKey(imageRequest); // BinaryResource resource = ImagePipelineFactory.getInstance() // .getMainDiskStorageCache().getResource(cacheKey); // File file=((FileBinaryResource)resource).getFile(); ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(info.getPic())) .setResizeOptions(new ResizeOptions(width, height)) .build(); DraweeController controller = Fresco.newDraweeControllerBuilder() .setOldController(((ItemView) holder).art.getController()) .setImageRequest(request) .build(); ((ItemView) holder).art.setController(controller); // ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(info.coverImgUrl)) // .setResizeOptions(new ResizeOptions(width, height)) // .build(); // DraweeController controller = Fresco.newDraweeControllerBuilder() // .setOldController(((ItemView) holder).art.getController()) // .setImageRequest(request) // .build(); // ((ItemView) holder).art.setController(controller); ((ItemView) holder).albumName.setText(info.getTitle()); ((ItemView) holder).artsit.setText(info.getAuthor()); ((ItemView) holder).itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, AlbumsDetailActivity.class); // intent.putExtra("albumid",info.getType_id()); // intent.putExtra("albumart",info.getPic()); // intent.putExtra("albumname",info.getTitle()); // intent.putExtra("artistname",info.getAuthor()); intent.putExtra("albumid", info.getType_id()); intent.putExtra("albumart", info.getPic()); intent.putExtra("albumname", info.getTitle()); intent.putExtra("albumdetail", info.getDesc()); // intent.putExtra("playlistcount",info.get); mContext.startActivity(intent); // AlbumsDetail fragment = AlbumsDetail.newInstance(info.id, info.coverImgUrl, info.albumName, // info.artistName, info.publishTime); // FragmentTransaction transaction = ((AppCompatActivity) getContext()).getSupportFragmentManager().beginTransaction(); // transaction.replace(R.id.fragment_container, fragment); // transaction.commitAllowingStateLoss(); } }); } @Override public int getItemCount() { if (mList == null) { return 0; } if (mList.size() < 7) { return mList.size(); } else { return 6; } } class ItemView extends RecyclerView.ViewHolder implements View.OnClickListener { private SimpleDraweeView art; private TextView albumName, artsit; public ItemView(View itemView) { super(itemView); art = (SimpleDraweeView) itemView.findViewById(R.id.album_art); albumName = (TextView) itemView.findViewById(R.id.album_name); artsit = (TextView) itemView.findViewById(R.id.artist_name); } @Override public void onClick(View v) { } } } }