diff --git a/app/src/main/java/com/gh/common/util/RandomUtils.java b/app/src/main/java/com/gh/common/util/RandomUtils.java new file mode 100644 index 0000000000..96c0216b96 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/RandomUtils.java @@ -0,0 +1,44 @@ +package com.gh.common.util; + +import java.util.Random; + +/** + * Created by LGT on 2016/6/7. + */ +public class RandomUtils { + + /* + * 从 size 范围内随机 count 个不重复的数字 + */ + public static int[] getRandomArray(int count, int size) { + int[] index = new int[count]; + Random random = new Random(System.currentTimeMillis()); + for (int i = 0; i < index.length; i++) { + if (i == 0) { + index[i] = random.nextInt(size); + } else { + random(random, index, i, size); + } + } + return index; + } + + private static int random(Random random, int[] index, int i, int size) { + int seed = random.nextInt(size); + for (int j = 0; j < i; j++) { + if (index[j] == seed) { + return random(random, index, i, size); + } + } + return seed; + } + + /* + * 从 size 范围内随机一个数字 + */ + public static int nextInt(int size) { + Random random = new Random(System.currentTimeMillis()); + return random.nextInt(size); + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 0287c0810c..3ffacf3cdb 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -37,6 +37,7 @@ import com.gh.common.util.MD5Utils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.PlatformUtils; +import com.gh.common.util.RandomUtils; import com.gh.common.util.RunningUtils; import com.gh.common.util.SpeedUtils; import com.gh.common.util.Utils; @@ -87,7 +88,6 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Random; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -658,9 +658,7 @@ public class MainActivity extends BaseFragmentActivity implements if (searchHintList.size() == 1) { searchHint = searchHintList.get(0); } else { - Random random = new Random(System.currentTimeMillis()); - int index = random.nextInt(searchHintList.size()); - searchHint = searchHintList.get(index); + searchHint = searchHintList.get(RandomUtils.nextInt(searchHintList.size())); } EventBus.getDefault().post( new EBTopState("搜索", searchHintList @@ -1007,7 +1005,7 @@ public class MainActivity extends BaseFragmentActivity implements break; case 3: home4Layout.setClickable(false); - home4Image.setImageResource(R.drawable.home3_selected); + home4Image.setImageResource(R.drawable.home4_selected); home4Title.setTextColor(getResources().getColor(R.color.theme_colors)); if (readFragment == null) { readFragment = new ReadFragment(); @@ -1033,7 +1031,7 @@ public class MainActivity extends BaseFragmentActivity implements home1Image.setImageResource(R.drawable.home1_unselected); home2Image.setImageResource(R.drawable.home2_unselected); home3Image.setImageResource(R.drawable.home3_unselected); - home4Image.setImageResource(R.drawable.home3_unselected); + home4Image.setImageResource(R.drawable.home4_unselected); home1Title.setTextColor(0xFF333333); home2Title.setTextColor(0xFF333333); home3Title.setTextColor(0xFF333333); diff --git a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java index 7a896f0686..5eb00b6295 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java @@ -15,6 +15,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.AppController; import com.gh.common.constant.Constants; import com.gh.common.util.DownloadItemUtils; @@ -51,6 +52,7 @@ public class Game1Fragment extends Fragment implements OnRefreshListener { private Game1FragmentAdapter adapter; private LinearLayoutManager layoutManager; private LinearLayout reuse_no_connection; + private ProgressBarCircularIndeterminate game_pb_loading; // 黄壮华 添加 记录信息的map 修改2015/8/15 private ArrayMap locationMap; @@ -145,6 +147,9 @@ public class Game1Fragment extends Fragment implements OnRefreshListener { // 黄壮华 添加 初始化游戏状态 修改2015/8/21 DownloadItemUtils.initializeGameMap(getActivity(), gameMap); + game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); + game_pb_loading.setVisibility(View.GONE); + reuse_no_connection = (LinearLayout) view .findViewById(R.id.reuse_no_connection); reuse_no_connection.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java index af406cfe33..e5d9e8de19 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java @@ -34,6 +34,7 @@ import com.gh.common.util.DownloadItemUtils; import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.NewsUtils; +import com.gh.common.util.RandomUtils; import com.gh.common.util.TimestampUtils; import com.gh.common.view.AutoScrollViewPager; import com.gh.download.DownloadEntry; @@ -379,15 +380,7 @@ public class HomeFragmentAdapter extends for (int i = 0; i < 3; i++) { concernList.add(list.remove(0)); } - int[] index = new int[2]; - Random random = new Random(System.currentTimeMillis()); - for (int i = 0; i < 2; i++) { - if (i == 0) { - index[i] = random.nextInt(list.size()); - } else { - random(random, index, i, list.size()); - } - } + int[] index = RandomUtils.getRandomArray(2, list.size()); concernList.add(list.get(index[0])); concernList.add(list.get(index[1])); } else { @@ -483,8 +476,7 @@ public class HomeFragmentAdapter extends kapaigonglueMap.put(concernList.get(i) .getGameName(), entities); } - entities.add(list.remove(random.nextInt(list - .size()))); + entities.add(list.remove(random.nextInt(list.size()))); number++; if (number == 5) { break; @@ -1021,15 +1013,7 @@ public class HomeFragmentAdapter extends kapaigonglueList.clear(); if (allKapaigonglueList == null || allKapaigonglueList.isEmpty()) { if (allNewsList.size() > 5) { - Random random = new Random(System.currentTimeMillis()); - int[] index = new int[5]; - for (int i = 0; i < index.length; i++) { - if (i == 0) { - index[i] = random.nextInt(allNewsList.size()); - } else { - index[i] = random(random, index, i, allNewsList.size()); - } - } + int[] index = RandomUtils.getRandomArray(5, allNewsList.size()); for (int i = 0; i < index.length; i++) { kapaigonglueList.add(allNewsList.get(index[i])); } @@ -1038,15 +1022,7 @@ public class HomeFragmentAdapter extends } else if (allKapaigonglueList.size() < 5) { if (allNewsList.size() > 5 - allKapaigonglueList.size()) { kapaigonglueList.addAll(allKapaigonglueList); - Random random = new Random(System.currentTimeMillis()); - int[] index = new int[5 - allKapaigonglueList.size()]; - for (int i = 0; i < index.length; i++) { - if (i == 0) { - index[i] = random.nextInt(allNewsList.size()); - } else { - index[i] = random(random, index, i, allNewsList.size()); - } - } + int[] index = RandomUtils.getRandomArray(5 - allKapaigonglueList.size(), allNewsList.size()); for (int i = 0; i < index.length; i++) { kapaigonglueList.add(allNewsList.get(index[i])); } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read1Fragment.java b/app/src/main/java/com/gh/gamecenter/read/Read1Fragment.java index bea9274959..115bc0b22a 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read1Fragment.java @@ -1,6 +1,7 @@ package com.gh.gamecenter.read; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; @@ -34,32 +35,10 @@ public class Read1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); - game_swipe_refresh = (SwipeRefreshLayout) view - .findViewById(R.id.game_swipe_refresh); + game_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.game_swipe_refresh); game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); game_swipe_refresh.setOnRefreshListener(this); - recyclerview = (RecyclerView) view.findViewById(R.id.game_list); - recyclerview.setHasFixedSize(true); - layoutManager = new LinearLayoutManager(getActivity()); - recyclerview.setLayoutManager(layoutManager); - adapter = new Read1FragmentAdapter(); - recyclerview.setAdapter(adapter); - recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { - - @Override - public void onScrollStateChanged(RecyclerView recyclerView, - int newState) { - super.onScrollStateChanged(recyclerView, newState); -// if (newState == RecyclerView.SCROLL_STATE_IDLE -// && layoutManager.findLastVisibleItemPosition() == 1 + adapter.getList().size()) { -// -// } - } - - }); - recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); - game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); @@ -72,6 +51,28 @@ public class Read1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr reuse_no_connection.setVisibility(View.GONE); } }); + + recyclerview = (RecyclerView) view.findViewById(R.id.game_list); + recyclerview.setHasFixedSize(true); + layoutManager = new LinearLayoutManager(getActivity()); + recyclerview.setLayoutManager(layoutManager); + adapter = new Read1FragmentAdapter(getActivity(), game_swipe_refresh, game_pb_loading, + reuse_no_connection, true); + recyclerview.setAdapter(adapter); + recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { + + @Override + public void onScrollStateChanged(RecyclerView recyclerView, + int newState) { + super.onScrollStateChanged(recyclerView, newState); +// if (newState == RecyclerView.SCROLL_STATE_IDLE +// && layoutManager.findLastVisibleItemPosition() == 1 + adapter.getNewsList().size()) { +// +// } + } + + }); + recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); } @Nullable @@ -83,8 +84,19 @@ public class Read1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr return view; } + private Handler handler = new Handler(); + + Runnable runnable = new Runnable() { + @Override + public void run() { + adapter = new Read1FragmentAdapter(getActivity(), game_swipe_refresh, game_pb_loading, + reuse_no_connection, true); + recyclerview.setAdapter(adapter); + } + }; + @Override public void onRefresh() { - + handler.postDelayed(runnable, 1000); } } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/read/Read1FragmentAdapter.java index 0bfab1a7ad..aba52c2e94 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read1FragmentAdapter.java @@ -1,40 +1,370 @@ package com.gh.gamecenter.read; +import android.app.Activity; +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.AppController; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.view.AutoScrollViewPager; import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.RecyclingPagerAdapter; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import org.json.JSONArray; + +import java.lang.reflect.Type; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; /** * Created by LGT on 2016/6/3. */ public class Read1FragmentAdapter extends RecyclerView.Adapter { - public Read1FragmentAdapter() { + private Activity activity; + private Context context; + private SwipeRefreshLayout game_swipe_refresh; + private ProgressBarCircularIndeterminate game_pb_loading; + private LinearLayout reuse_no_connection; + + private List slideList; + private List newsList; + + private boolean isLoading; + private boolean isSlideError; + + public Read1FragmentAdapter(Activity act, + SwipeRefreshLayout swipeRefreshLayout, + ProgressBarCircularIndeterminate pbLoading, + LinearLayout noConnection, + boolean isLoad) { + activity = act; + context = activity; + game_swipe_refresh = swipeRefreshLayout; + game_pb_loading = pbLoading; + reuse_no_connection = noConnection; + + slideList = new ArrayList(); + newsList = new ArrayList(); + + isLoading = false; + isSlideError = false; + + if (isLoad) { + load(); + } + } + + public void load() { + new Thread(runnable){}.start(); + } + + Runnable runnable = new Runnable() { + @Override + public void run() { + initSlide(); + addList(0); + } + }; + + public void addList(final int offset) { + if (isLoading) { + return; + } + isLoading = true; + String url = "http://api.ghzhushou.com/gapi/v1d0/game/55097638fc1a6fa45f8b4568/news?limit=20&offset=" + offset; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + List list = gson.fromJson(response.toString(), listType); + for (int i = 0; i < list.size(); i++) { + newsList.add(list.get(i)); + notifyItemInserted(newsList.size()); + } + + if (offset == 0 && game_swipe_refresh.isRefreshing()) { + game_swipe_refresh.setRefreshing(false); + } + if (game_pb_loading.getVisibility() == View.VISIBLE) { + game_pb_loading.setVisibility(View.GONE); + } + isLoading = false; + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + isLoading = false; + } + }); + AppController.addToRequestQueue(request, Read1Fragment.class.getSimpleName()); + } + + private void initSlide() { + String url = "http://api.ghzhushou.com/gapi/v1d0/index/slide?game_id=55097638fc1a6fa45f8b4568"; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + slideList = gson.fromJson(response.toString(), listType); + if (slideList != null) { + notifyItemChanged(0); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + AppController.addToRequestQueue(request, Read1Fragment.class.getSimpleName()); + } + + public List getNewsList() { + return newsList; + } + + public boolean isLoading() { + return isLoading; + } + + class ReadSlideViewHolder extends RecyclerView.ViewHolder { + private AutoScrollViewPager viewPager; + private LinearLayout viewpager_ll_hint; + private TextView viewpager_tv_failure; + + public ReadSlideViewHolder(View v) { + super(v); + viewpager_tv_failure = (TextView) v.findViewById(R.id.viewpager_tv_failure); + viewpager_tv_failure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isSlideError = false; + notifyItemChanged(0); + initSlide(); + } + }); + viewpager_ll_hint = (LinearLayout) v.findViewById(R.id.viewpager_ll_hint); + viewPager = (AutoScrollViewPager) v.findViewById(R.id.view_pager); + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + + @Override + public void onPageSelected(int position) { + for (int i = 0, size = viewpager_ll_hint.getChildCount(); i < size; i++) { + if (i == position % size) { + ((ImageView) viewpager_ll_hint.getChildAt(i)) + .setImageResource(R.drawable.oval_white_hint_dn); + } else { + ((ImageView) viewpager_ll_hint.getChildAt(i)) + .setImageResource(R.drawable.oval_white_hint_up); + } + } + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageScrollStateChanged(int state) { + // 解决viewpager和SwipeRefreshLayout滑动冲突 + if (state == ViewPager.SCROLL_STATE_DRAGGING) { + game_swipe_refresh.setEnabled(false); + } else { + game_swipe_refresh.setEnabled(true); + } + } + }); + } + + } + + class ReadSlideAdapter extends RecyclingPagerAdapter { + + private Context mContext; + + private List mSlideList; + + public ReadSlideAdapter(Context context, List list) { + mContext = context; + mSlideList = list; + } + + @Override + public int getCount() { + return Integer.MAX_VALUE; + } + + @Override + public View getView(int position, View convertView, ViewGroup container) { + ImageView imageView = new ImageView(mContext); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + imageView.setLayoutParams(params); + ImageUtils.getInstance(mContext).display(mSlideList.get(position % mSlideList.size()), + imageView, R.drawable.preload); + return imageView; + } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.plugin1_autoscrollviewpager_viewholder, parent, false); - return null; + if (viewType == 0) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read1_slide, parent, false); + DisplayMetrics outMetrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + int height = (int) (outMetrics.widthPixels / 2f); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, height); + view.setLayoutParams(params); + return new ReadSlideViewHolder(view); + } else if (viewType > 0 && viewType <= newsList.size()) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read_item, parent, false); + return new ReadViewHolder(view); + } else { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view); + } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof ReadSlideViewHolder) { + ReadSlideViewHolder viewHolder = (ReadSlideViewHolder) holder; + if (isSlideError) { + viewHolder.viewpager_tv_failure.setVisibility(View.VISIBLE); + viewHolder.viewPager.setVisibility(View.GONE); + viewHolder.viewpager_ll_hint.setVisibility(View.GONE); + } else { + viewHolder.viewpager_tv_failure.setVisibility(View.GONE); + viewHolder.viewPager.setVisibility(View.VISIBLE); + viewHolder.viewpager_ll_hint.setVisibility(View.VISIBLE); + } + if (slideList.size() > 0) { + int currentItem = 0; + if (viewHolder.viewPager.getAdapter() != null) { + currentItem = viewHolder.viewPager.getCurrentItem(); + } + RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, + RelativeLayout.LayoutParams.WRAP_CONTENT); + rparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); + rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + rparams.addRule(RelativeLayout.CENTER_HORIZONTAL); + viewHolder.viewpager_ll_hint.setLayoutParams(rparams); + viewHolder.viewpager_ll_hint.removeAllViews(); + for (int i = 0, size = slideList.size(); i < size; i++) { + ImageView imageView = new ImageView(context); + LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( + DisplayUtils.dip2px(context, 5), + DisplayUtils.dip2px(context, 5)); + lparams.bottomMargin = DisplayUtils.dip2px(context, 8); + lparams.rightMargin = DisplayUtils.dip2px(context, 8); + if (i == currentItem) { + imageView.setImageResource(R.drawable.oval_white_hint_dn); + } else { + imageView.setImageResource(R.drawable.oval_white_hint_up); + } + imageView.setLayoutParams(lparams); + viewHolder.viewpager_ll_hint.addView(imageView); + } + viewHolder.viewPager.setAdapter(new ReadSlideAdapter(context, slideList)); + viewHolder.viewPager.setCurrentItem(currentItem); + viewHolder.viewPager.setInterval(3000); + viewHolder.viewPager.startAutoScroll(); + } + } else if (holder instanceof ReadViewHolder) { + ReadViewHolder viewHolder = (ReadViewHolder) holder; + NewsEntity newsEntity = newsList.get(position - 1); + viewHolder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + if (TextUtils.isEmpty(newsEntity.getThumb())) { + String[] urls = {"http://image.ghzhushou.com/pic/56a05b058ab49ecd048b457a.jpg", + "http://image.ghzhushou.com/pic/56a9dc3b8ab49e58138b457f.jpg", + "http://image.ghzhushou.com/pic/56ac27e58ab49e47448b456d.jpg", + "http://image.ghzhushou.com/pic/56b177f68ab49ea9438b4569.jpg", + "http://image.ghzhushou.com/pic/56b3695a8ab49e1f2d8b4567.jpg"}; + ImageUtils.getInstance(context).display(urls[position % 5], viewHolder.fm_read_iv_thumb); + } else { + ImageUtils.getInstance(context).display(newsEntity.getThumb(), viewHolder.fm_read_iv_thumb); + } + viewHolder.fm_read_tv_title.setText(newsEntity.getTitle()); + viewHolder.fm_read_tv_time.setText(getTimeAgo(Long.valueOf(newsEntity.getPublishOn()))); + viewHolder.fm_read_tv_read.setText("211次浏览"); + } else if (holder instanceof FooterViewHolder) { + FooterViewHolder viewHolder = (FooterViewHolder) holder; + viewHolder.footerview_progressbar.setVisibility(View.GONE); + viewHolder.footerview_tv_loading.setText("点击加载更多"); + viewHolder.rootView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addList(newsList.size()); + } + }); + } } @Override public int getItemCount() { - return 0; + if (newsList.isEmpty()){ + return 0; + } + return 1 + newsList.size() + 1; } @Override public int getItemViewType(int position) { return position; } + + //根据提供的时间,返回该时间与当前时间的差距 + private String getTimeAgo(long time) { + long now = System.currentTimeMillis() / 1000; + long gap = now - time; + if (gap <= 60) { + return "1分钟前"; + } else if (gap > 60 && gap < 3600) { + return Math.floor(gap / 60) + "分钟前"; + } else if (gap >= 3600 && gap < 86400) { + return Math.floor(gap / 3600) + "小时前"; + } else { + SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()); + return format.format(time * 1000); + } + } + } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read2Fragment.java b/app/src/main/java/com/gh/gamecenter/read/Read2Fragment.java index 8410b16bf7..7eeba9ea41 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read2Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read2Fragment.java @@ -1,6 +1,7 @@ package com.gh.gamecenter.read; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; @@ -39,11 +40,25 @@ public class Read2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); game_swipe_refresh.setOnRefreshListener(this); + game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); + + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); + reuse_no_connection.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + game_swipe_refresh.setRefreshing(true); + recyclerview.setVisibility(View.VISIBLE); + game_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + } + }); + recyclerview = (RecyclerView) view.findViewById(R.id.game_list); recyclerview.setHasFixedSize(true); layoutManager = new LinearLayoutManager(getActivity()); recyclerview.setLayoutManager(layoutManager); - adapter = new Read2FragmentAdapter(); + adapter = new Read2FragmentAdapter(getActivity(), game_swipe_refresh, + game_pb_loading, reuse_no_connection, true); recyclerview.setAdapter(adapter); recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { @@ -59,19 +74,6 @@ public class Read2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr }); recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); - - game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); - - reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - game_swipe_refresh.setRefreshing(true); - recyclerview.setVisibility(View.VISIBLE); - game_pb_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - } - }); } @Nullable @@ -83,8 +85,19 @@ public class Read2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr return view; } + private Handler handler = new Handler(); + + Runnable runnable = new Runnable() { + @Override + public void run() { + adapter = new Read2FragmentAdapter(getActivity(), game_swipe_refresh, + game_pb_loading, reuse_no_connection, true); + recyclerview.setAdapter(adapter); + } + }; + @Override public void onRefresh() { - + handler.postDelayed(runnable, 1000); } } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/read/Read2FragmentAdapter.java index ee69dc777e..08e48d5bd4 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read2FragmentAdapter.java @@ -1,40 +1,289 @@ package com.gh.gamecenter.read; +import android.app.Activity; +import android.content.Context; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.AppController; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.ImageUtils; import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import org.json.JSONArray; + +import java.lang.reflect.Type; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; /** * Created by LGT on 2016/6/3. */ public class Read2FragmentAdapter extends RecyclerView.Adapter { - public Read2FragmentAdapter() { + private Activity activity; + private Context context; + private SwipeRefreshLayout game_swipe_refresh; + private ProgressBarCircularIndeterminate game_pb_loading; + private LinearLayout reuse_no_connection; + private List slideList; + private List newsList; + + private boolean isLoading; + private boolean isSlideError; + + public Read2FragmentAdapter(Activity act, + SwipeRefreshLayout swipeRefreshLayout, + ProgressBarCircularIndeterminate pbLoading, + LinearLayout noConnection, + boolean isLoad) { + activity = act; + context = activity; + game_swipe_refresh = swipeRefreshLayout; + game_pb_loading = pbLoading; + reuse_no_connection = noConnection; + + slideList = new ArrayList(); + newsList = new ArrayList(); + + isLoading = false; + isSlideError = false; + + if (isLoad) { + load(); + } + } + + public void load() { + new Thread(runnable){}.start(); + } + + Runnable runnable = new Runnable() { + @Override + public void run() { + addList(0); + } + }; + + public void addList(final int offset) { + if (isLoading) { + return; + } + isLoading = true; + String url = "http://api.ghzhushou.com/gapi/v1d0/game/55097638fc1a6fa45f8b4568/news?limit=20&offset=" + offset; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + List list = gson.fromJson(response.toString(), listType); + for (int i = 0; i < list.size(); i++) { + newsList.add(list.get(i)); + notifyItemInserted(newsList.size()); + } + + if (offset == 0 && game_swipe_refresh.isRefreshing()) { + game_swipe_refresh.setRefreshing(false); + } + if (game_pb_loading.getVisibility() == View.VISIBLE) { + game_pb_loading.setVisibility(View.GONE); + } + isLoading = false; + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + isLoading = false; + } + }); + AppController.addToRequestQueue(request, Read2Fragment.class.getSimpleName()); + } + + public List getNewsList() { + return newsList; + } + + public boolean isLoading() { + return isLoading; + } + + private class ReadSpecial1ViewHolder extends RecyclerView.ViewHolder{ + + private View view; + private TextView fm_read2_special1_title; + private ImageView fm_read2_special1_thumb; + + public ReadSpecial1ViewHolder(View itemView) { + super(itemView); + + view = itemView; + fm_read2_special1_title = (TextView) itemView.findViewById(R.id.fm_read2_special1_title); + fm_read2_special1_thumb = (ImageView) itemView.findViewById(R.id.fm_read2_special1_thumb); + + } + } + + private class ReadSpecial2ViewHolder extends RecyclerView.ViewHolder{ + + private View view; + private TextView fm_read2_special2_title; + private ImageView fm_read2_special1_thumb1, fm_read2_special1_thumb2, + fm_read2_special1_thumb3; + + public ReadSpecial2ViewHolder(View itemView) { + super(itemView); + + view = itemView; + fm_read2_special2_title = (TextView) itemView.findViewById(R.id.fm_read2_special2_title); + fm_read2_special1_thumb1 = (ImageView) itemView.findViewById(R.id.fm_read2_special1_thumb1); + fm_read2_special1_thumb2 = (ImageView) itemView.findViewById(R.id.fm_read2_special1_thumb2); + fm_read2_special1_thumb3 = (ImageView) itemView.findViewById(R.id.fm_read2_special1_thumb3); + + } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.plugin1_autoscrollviewpager_viewholder, parent, false); - return null; + if (viewType == ITEM_TYPE.normal) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read_item, parent, false); + return new ReadViewHolder(view); + } else if (viewType == ITEM_TYPE.special1) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read2_special1, parent, false); + return new ReadSpecial1ViewHolder(view); + } else if (viewType == ITEM_TYPE.special2) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read2_special2, parent, false); + return new ReadSpecial2ViewHolder(view); + } else { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view); + } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof ReadViewHolder) { + ReadViewHolder viewHolder = (ReadViewHolder) holder; + NewsEntity newsEntity = newsList.get(position); + viewHolder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + if (TextUtils.isEmpty(newsEntity.getThumb())) { + String[] urls = {"http://image.ghzhushou.com/pic/56a05b058ab49ecd048b457a.jpg", + "http://image.ghzhushou.com/pic/56a9dc3b8ab49e58138b457f.jpg", + "http://image.ghzhushou.com/pic/56ac27e58ab49e47448b456d.jpg", + "http://image.ghzhushou.com/pic/56b177f68ab49ea9438b4569.jpg", + "http://image.ghzhushou.com/pic/56b3695a8ab49e1f2d8b4567.jpg"}; + ImageUtils.getInstance(context).display(urls[position % 5], viewHolder.fm_read_iv_thumb); + } else { + ImageUtils.getInstance(context).display(newsEntity.getThumb(), viewHolder.fm_read_iv_thumb); + } + viewHolder.fm_read_tv_title.setText(newsEntity.getTitle()); + viewHolder.fm_read_tv_time.setText(getTimeAgo(Long.valueOf(newsEntity.getPublishOn()))); + viewHolder.fm_read_tv_read.setText("211次浏览"); + } else if (holder instanceof ReadSpecial1ViewHolder) { + ReadSpecial1ViewHolder viewHolder = (ReadSpecial1ViewHolder) holder; + DisplayMetrics outMetrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + int height = (int) (outMetrics.widthPixels / 3f) - DisplayUtils.dip2px(context, 8); + LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, height); + lparams.topMargin = DisplayUtils.dip2px(context, 8); + viewHolder.fm_read2_special1_thumb.setLayoutParams(lparams); + ImageUtils.getInstance(context).display("http://image.ghzhushou.com/pic/572ff6b08ab49e5c048b4615.jpg", + viewHolder.fm_read2_special1_thumb); + } else if (holder instanceof ReadSpecial2ViewHolder) { + ReadSpecial2ViewHolder viewHolder = (ReadSpecial2ViewHolder) holder; + ImageUtils.getInstance(context).display("http://image.ghzhushou.com/pic/5743c8fb8ab49e96118b4571.jpg", + viewHolder.fm_read2_special1_thumb1); + ImageUtils.getInstance(context).display("http://image.ghzhushou.com/pic/573d89ec8ab49ec97a8b456c.jpg", + viewHolder.fm_read2_special1_thumb2); + ImageUtils.getInstance(context).display("http://image.ghzhushou.com/pic/572064e68ab49eaf138b456a.jpg", + viewHolder.fm_read2_special1_thumb3); + } else if (holder instanceof FooterViewHolder) { + FooterViewHolder viewHolder = (FooterViewHolder) holder; + viewHolder.footerview_progressbar.setVisibility(View.GONE); + viewHolder.footerview_tv_loading.setText("点击加载更多"); + viewHolder.rootView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addList(newsList.size()); + } + }); + } } @Override public int getItemCount() { - return 0; + if (newsList.isEmpty()){ + return 0; + } + return newsList.size() + 1; + } + + class ITEM_TYPE { + + public static final int normal = 0;//正常布局 + public static final int special1 = 1;//一张1:3图 + public static final int special2 = 2;//三张4:3图 + public static final int footer = 3;//页脚 + } @Override public int getItemViewType(int position) { - return position; + if (position == 1) { + return ITEM_TYPE.special1; + } + if (position == 2) { + return ITEM_TYPE.special2; + } + if (position == newsList.size()) { + return ITEM_TYPE.footer; + } + return ITEM_TYPE.normal; } + + //根据提供的时间,返回该时间与当前时间的差距 + private String getTimeAgo(long time) { + long now = System.currentTimeMillis() / 1000; + long gap = now - time; + if (gap <= 60) { + return "1分钟前"; + } else if (gap > 60 && gap < 3600) { + return Math.floor(gap / 60) + "分钟前"; + } else if (gap >= 3600 && gap < 86400) { + return Math.floor(gap / 3600) + "小时前"; + } else { + SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()); + return format.format(time * 1000); + } + } + } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read3Fragment.java b/app/src/main/java/com/gh/gamecenter/read/Read3Fragment.java index ff76fe203c..0a246ea846 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read3Fragment.java @@ -1,6 +1,7 @@ package com.gh.gamecenter.read; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; @@ -39,11 +40,25 @@ public class Read3Fragment extends Fragment implements SwipeRefreshLayout.OnRefr game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); game_swipe_refresh.setOnRefreshListener(this); + game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); + + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); + reuse_no_connection.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + game_swipe_refresh.setRefreshing(true); + recyclerview.setVisibility(View.VISIBLE); + game_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + } + }); + recyclerview = (RecyclerView) view.findViewById(R.id.game_list); recyclerview.setHasFixedSize(true); layoutManager = new LinearLayoutManager(getActivity()); recyclerview.setLayoutManager(layoutManager); - adapter = new Read3FragmentAdapter(); + adapter = new Read3FragmentAdapter(getActivity(), game_swipe_refresh, + game_pb_loading, reuse_no_connection, true); recyclerview.setAdapter(adapter); recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { @@ -59,19 +74,6 @@ public class Read3Fragment extends Fragment implements SwipeRefreshLayout.OnRefr }); recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); - - game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); - - reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - game_swipe_refresh.setRefreshing(true); - recyclerview.setVisibility(View.VISIBLE); - game_pb_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - } - }); } @Nullable @@ -83,8 +85,19 @@ public class Read3Fragment extends Fragment implements SwipeRefreshLayout.OnRefr return view; } + private Handler handler = new Handler(); + + Runnable runnable = new Runnable() { + @Override + public void run() { + adapter = new Read3FragmentAdapter(getActivity(), game_swipe_refresh, + game_pb_loading, reuse_no_connection, true); + recyclerview.setAdapter(adapter); + } + }; + @Override public void onRefresh() { - + handler.postDelayed(runnable, 1000); } } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/read/Read3FragmentAdapter.java index ac1f47b888..0684c6a6b2 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read3FragmentAdapter.java @@ -1,40 +1,368 @@ package com.gh.gamecenter.read; +import android.app.Activity; +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.AppController; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.view.AutoScrollViewPager; import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.RecyclingPagerAdapter; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import org.json.JSONArray; + +import java.lang.reflect.Type; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; /** * Created by LGT on 2016/6/3. */ public class Read3FragmentAdapter extends RecyclerView.Adapter { - public Read3FragmentAdapter() { + private Activity activity; + private Context context; + private SwipeRefreshLayout game_swipe_refresh; + private ProgressBarCircularIndeterminate game_pb_loading; + private LinearLayout reuse_no_connection; + + private List slideList; + private List newsList; + + private boolean isLoading; + private boolean isSlideError; + + public Read3FragmentAdapter(Activity act, + SwipeRefreshLayout swipeRefreshLayout, + ProgressBarCircularIndeterminate pbLoading, + LinearLayout noConnection, + boolean isLoad) { + activity = act; + context = activity; + game_swipe_refresh = swipeRefreshLayout; + game_pb_loading = pbLoading; + reuse_no_connection = noConnection; + + slideList = new ArrayList(); + newsList = new ArrayList(); + + isLoading = false; + isSlideError = false; + + if (isLoad) { + load(); + } + } + + public void load() { + new Thread(runnable){}.start(); + } + + Runnable runnable = new Runnable() { + @Override + public void run() { + initSlide(); + addList(0); + } + }; + + public void addList(final int offset) { + if (isLoading) { + return; + } + isLoading = true; + String url = "http://api.ghzhushou.com/gapi/v1d0/game/55097638fc1a6fa45f8b4568/news?limit=20&offset=" + offset; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + List list = gson.fromJson(response.toString(), listType); + for (int i = 0; i < list.size(); i++) { + newsList.add(list.get(i)); + notifyItemInserted(newsList.size()); + } + + if (offset == 0 && game_swipe_refresh.isRefreshing()) { + game_swipe_refresh.setRefreshing(false); + } + if (game_pb_loading.getVisibility() == View.VISIBLE) { + game_pb_loading.setVisibility(View.GONE); + } + isLoading = false; + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + isLoading = false; + } + }); + AppController.addToRequestQueue(request, Read3Fragment.class.getSimpleName()); + } + + private void initSlide() { + String url = "http://api.ghzhushou.com/gapi/v1d0/index/slide?game_id=55097638fc1a6fa45f8b4568"; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + slideList = gson.fromJson(response.toString(), listType); + if (slideList != null) { + notifyItemChanged(0); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + AppController.addToRequestQueue(request, Read3Fragment.class.getSimpleName()); + } + + public List getNewsList() { + return newsList; + } + + public boolean isLoading() { + return isLoading; + } + + class ReadSlideViewHolder extends RecyclerView.ViewHolder { + private AutoScrollViewPager viewPager; + private LinearLayout viewpager_ll_hint; + private TextView viewpager_tv_failure; + + public ReadSlideViewHolder(View v) { + super(v); + viewpager_tv_failure = (TextView) v.findViewById(R.id.viewpager_tv_failure); + viewpager_tv_failure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isSlideError = false; + notifyItemChanged(0); + initSlide(); + } + }); + viewpager_ll_hint = (LinearLayout) v.findViewById(R.id.viewpager_ll_hint); + viewPager = (AutoScrollViewPager) v.findViewById(R.id.view_pager); + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + + @Override + public void onPageSelected(int position) { + for (int i = 0, size = viewpager_ll_hint.getChildCount(); i < size; i++) { + if (i == position % size) { + ((ImageView) viewpager_ll_hint.getChildAt(i)) + .setImageResource(R.drawable.oval_white_hint_dn); + } else { + ((ImageView) viewpager_ll_hint.getChildAt(i)) + .setImageResource(R.drawable.oval_white_hint_up); + } + } + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageScrollStateChanged(int state) { + // 解决viewpager和SwipeRefreshLayout滑动冲突 + if (state == ViewPager.SCROLL_STATE_DRAGGING) { + game_swipe_refresh.setEnabled(false); + } else { + game_swipe_refresh.setEnabled(true); + } + } + }); + } + + } + + class ReadSlideAdapter extends RecyclingPagerAdapter { + + private Context mContext; + + private List mSlideList; + + public ReadSlideAdapter(Context context, List list) { + mContext = context; + mSlideList = list; + } + + @Override + public int getCount() { + return Integer.MAX_VALUE; + } + + @Override + public View getView(int position, View convertView, ViewGroup container) { + ImageView imageView = new ImageView(mContext); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + imageView.setLayoutParams(params); + ImageUtils.getInstance(mContext).display(mSlideList.get(position % mSlideList.size()), + imageView, R.drawable.preload); + return imageView; + } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.plugin1_autoscrollviewpager_viewholder, parent, false); - return null; + if (viewType == 0) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read1_slide, parent, false); + DisplayMetrics outMetrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + int height = (int) (outMetrics.widthPixels / 2f); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, height); + view.setLayoutParams(params); + return new ReadSlideViewHolder(view); + } else if (viewType > 0 && viewType <= newsList.size()) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read_item, parent, false); + return new ReadViewHolder(view); + } else { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view); + } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof ReadSlideViewHolder) { + ReadSlideViewHolder viewHolder = (ReadSlideViewHolder) holder; + if (isSlideError) { + viewHolder.viewpager_tv_failure.setVisibility(View.VISIBLE); + viewHolder.viewPager.setVisibility(View.GONE); + viewHolder.viewpager_ll_hint.setVisibility(View.GONE); + } else { + viewHolder.viewpager_tv_failure.setVisibility(View.GONE); + viewHolder.viewPager.setVisibility(View.VISIBLE); + viewHolder.viewpager_ll_hint.setVisibility(View.VISIBLE); + } + if (slideList.size() > 0) { + int currentItem = 0; + if (viewHolder.viewPager.getAdapter() != null) { + currentItem = viewHolder.viewPager.getCurrentItem(); + } + RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, + RelativeLayout.LayoutParams.WRAP_CONTENT); + rparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); + rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + rparams.addRule(RelativeLayout.CENTER_HORIZONTAL); + viewHolder.viewpager_ll_hint.setLayoutParams(rparams); + viewHolder.viewpager_ll_hint.removeAllViews(); + for (int i = 0, size = slideList.size(); i < size; i++) { + ImageView imageView = new ImageView(context); + LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( + DisplayUtils.dip2px(context, 5), + DisplayUtils.dip2px(context, 5)); + lparams.bottomMargin = DisplayUtils.dip2px(context, 8); + lparams.rightMargin = DisplayUtils.dip2px(context, 8); + if (i == currentItem) { + imageView.setImageResource(R.drawable.oval_white_hint_dn); + } else { + imageView.setImageResource(R.drawable.oval_white_hint_up); + } + imageView.setLayoutParams(lparams); + viewHolder.viewpager_ll_hint.addView(imageView); + } + viewHolder.viewPager.setAdapter(new ReadSlideAdapter(context, slideList)); + viewHolder.viewPager.setCurrentItem(currentItem); + viewHolder.viewPager.setInterval(3000); + viewHolder.viewPager.startAutoScroll(); + } + } else if (holder instanceof ReadViewHolder) { + ReadViewHolder viewHolder = (ReadViewHolder) holder; + NewsEntity newsEntity = newsList.get(position - 1); + viewHolder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + if (TextUtils.isEmpty(newsEntity.getThumb())) { + viewHolder.fm_read_iv_thumb.setVisibility(View.GONE); + } else { + viewHolder.fm_read_iv_thumb.setVisibility(View.VISIBLE); + ImageUtils.getInstance(context).display(newsEntity.getThumb(), viewHolder.fm_read_iv_thumb); + } + viewHolder.fm_read_ll_read.setVisibility(View.GONE); + viewHolder.fm_read_tv_type.setVisibility(View.VISIBLE); + viewHolder.fm_read_tv_title.setText(newsEntity.getTitle()); + viewHolder.fm_read_tv_time.setText(getTimeAgo(Long.valueOf(newsEntity.getPublishOn()))); + viewHolder.fm_read_tv_read.setText("211次浏览"); + } else if (holder instanceof FooterViewHolder) { + FooterViewHolder viewHolder = (FooterViewHolder) holder; + viewHolder.footerview_progressbar.setVisibility(View.GONE); + viewHolder.footerview_tv_loading.setText("点击加载更多"); + viewHolder.rootView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addList(newsList.size()); + } + }); + } } @Override public int getItemCount() { - return 0; + if (newsList.isEmpty()){ + return 0; + } + return 1 + newsList.size() + 1; } @Override public int getItemViewType(int position) { return position; } + + //根据提供的时间,返回该时间与当前时间的差距 + private String getTimeAgo(long time) { + long now = System.currentTimeMillis() / 1000; + long gap = now - time; + if (gap <= 60) { + return "1分钟前"; + } else if (gap > 60 && gap < 3600) { + return Math.floor(gap / 60) + "分钟前"; + } else if (gap >= 3600 && gap < 86400) { + return Math.floor(gap / 3600) + "小时前"; + } else { + SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()); + return format.format(time * 1000); + } + } + } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read4Fragment.java b/app/src/main/java/com/gh/gamecenter/read/Read4Fragment.java index 42edbec9f9..972fde16fa 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read4Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read4Fragment.java @@ -1,6 +1,7 @@ package com.gh.gamecenter.read; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; @@ -39,11 +40,25 @@ public class Read4Fragment extends Fragment implements SwipeRefreshLayout.OnRefr game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); game_swipe_refresh.setOnRefreshListener(this); + game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); + + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); + reuse_no_connection.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + game_swipe_refresh.setRefreshing(true); + recyclerview.setVisibility(View.VISIBLE); + game_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + } + }); + recyclerview = (RecyclerView) view.findViewById(R.id.game_list); recyclerview.setHasFixedSize(true); layoutManager = new LinearLayoutManager(getActivity()); recyclerview.setLayoutManager(layoutManager); - adapter = new Read4FragmentAdapter(); + adapter = new Read4FragmentAdapter(getActivity(), game_swipe_refresh, + game_pb_loading, reuse_no_connection, true); recyclerview.setAdapter(adapter); recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { @@ -59,19 +74,6 @@ public class Read4Fragment extends Fragment implements SwipeRefreshLayout.OnRefr }); recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); - - game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); - - reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - game_swipe_refresh.setRefreshing(true); - recyclerview.setVisibility(View.VISIBLE); - game_pb_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - } - }); } @Nullable @@ -83,8 +85,19 @@ public class Read4Fragment extends Fragment implements SwipeRefreshLayout.OnRefr return view; } + private Handler handler = new Handler(); + + Runnable runnable = new Runnable() { + @Override + public void run() { + adapter = new Read4FragmentAdapter(getActivity(), game_swipe_refresh, + game_pb_loading, reuse_no_connection, true); + recyclerview.setAdapter(adapter); + } + }; + @Override public void onRefresh() { - + handler.postDelayed(runnable, 1000); } } diff --git a/app/src/main/java/com/gh/gamecenter/read/Read4FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/read/Read4FragmentAdapter.java index 9d27e0ba04..85d58ba665 100644 --- a/app/src/main/java/com/gh/gamecenter/read/Read4FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/read/Read4FragmentAdapter.java @@ -1,40 +1,458 @@ package com.gh.gamecenter.read; +import android.app.Activity; +import android.content.Context; +import android.net.Uri; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; +import com.android.volley.NoConnectionError; +import com.android.volley.Response; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.AppController; +import com.gh.common.constant.Config; +import com.gh.common.constant.Constants; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.NewsUtils; +import com.gh.common.util.RandomUtils; +import com.gh.common.util.TimestampUtils; +import com.gh.common.util.Utils; import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.db.info.ConcernInfo; +import com.gh.gamecenter.db.info.GameInfo; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.manager.ConcernManager; +import com.gh.gamecenter.manager.GameManager; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; +import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; /** * Created by LGT on 2016/6/3. */ public class Read4FragmentAdapter extends RecyclerView.Adapter { - public Read4FragmentAdapter() { + private Activity activity; + private Context context; + private SwipeRefreshLayout game_swipe_refresh; + private ProgressBarCircularIndeterminate game_pb_loading; + private LinearLayout reuse_no_connection; + private List newsList; + private List myGameList; + private List allGameList; + private List likeGameList; + + private boolean isLoading; + + public Read4FragmentAdapter(Activity act, + SwipeRefreshLayout swipeRefreshLayout, + ProgressBarCircularIndeterminate pbLoading, + LinearLayout noConnection, + boolean isLoad) { + activity = act; + context = act; + game_swipe_refresh = swipeRefreshLayout; + game_pb_loading = pbLoading; + reuse_no_connection = noConnection; + + newsList = new ArrayList(); + myGameList = new ArrayList(); + allGameList = new ArrayList(); + likeGameList = new ArrayList(); + + isLoading = false; + + if (isLoad) { + load(); + } + + } + + public void load() { + new Thread(runnable){}.start(); + } + + Runnable runnable = new Runnable() { + @Override + public void run() { + initMyGameList(); + initLikeGameList(); + addList(0); + } + }; + + private int result; + + private void initMyGameList() { + ConcernManager concernManager = new ConcernManager(context); + List installedGame = concernManager.getInstalledGame(); + int size = installedGame.size() > 3 ? 3 : installedGame.size(); + final int count = size; + result = 0; + for (int i = 0; i < size; i++) { + ConcernInfo info = installedGame.get(i); + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( + TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/" + info.getId() + "/digest", Constants.GAME_CD), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + Gson gson = new Gson(); + GameEntity gameEntity = gson.fromJson(response.toString(), GameEntity.class); + myGameList.add(gameEntity); + result++; + if (result == count) { + if (myGameList.size() == 3) { + myGameList.add(new GameEntity()); + } + notifyItemChanged(2); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + result++; + if (result == count) { + if (myGameList.size() == 3) { + myGameList.add(new GameEntity()); + } + notifyItemChanged(2); + } + } + }); + AppController.addToRequestQueue(request, Read4Fragment.class); + } + } + + private void initLikeGameList() { + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( + TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/remenkapai", Constants.GAME_CD), + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + GameManager manager = new GameManager(context.getApplicationContext()); + List gameList = gson.fromJson(response.toString(), listType); + if (gameList != null && !gameList.isEmpty()) { + for (GameEntity entity : gameList) { + for (ApkEntity apkEntity : entity.getApk()) { + manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), + entity.getId(), entity.getName())); + } + } + //去掉已安装的游戏 + ConcernManager concernManager = new ConcernManager(context); + List installedGame = concernManager.getInstalledGame(); + for (ConcernInfo info : installedGame) { + for (int i = 0, size = gameList.size(); i < size; i++) { + if (gameList.get(i).getId().equals(info.getId())) { + gameList.remove(i); + break; + } + } + } + allGameList = gameList; + } + if (allGameList.size() > 0) { + if (allGameList.size() <= 2) { + likeGameList.addAll(allGameList); + } else { + int[] index = RandomUtils.getRandomArray(2, allGameList.size()); + likeGameList.add(allGameList.get(index[0])); + likeGameList.add(allGameList.get(index[1])); + } + notifyItemChanged(4); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + AppController.addToRequestQueue(request, Read4Fragment.class.getSimpleName()); + } + + public void addList(final int offset) { + if (isLoading) { + return; + } + isLoading = true; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(TimestampUtils.addTimestamp(Config.HOST + + "v1d45/news?type_group=" + Uri.encode("攻略") + + "&offset=0&limit=20", Constants.NEWS_CD), + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + List list = gson.fromJson(response.toString(), listType); + for (int i = 0; i < list.size(); i++) { + newsList.add(list.get(i)); + notifyItemInserted(getItemCount() - 1); + } + + if (offset == 0 && game_swipe_refresh.isRefreshing()) { + game_swipe_refresh.setRefreshing(false); + } + if (game_pb_loading.getVisibility() == View.VISIBLE) { + game_pb_loading.setVisibility(View.GONE); + } + isLoading = false; + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + isLoading = false; + } + }); + AppController.addToRequestQueue(request, Read4Fragment.class.getSimpleName()); + } + + public List getNewsList() { + return newsList; + } + + private class Read4ViewHolder extends RecyclerView.ViewHolder { + + private View view; + + private TextView fm_read4_tv_label; + + private RecyclerView fm_read4_rv_grid; + + private TextView news_type, news_title; + + public Read4ViewHolder(View itemView) { + super(itemView); + + view = itemView; + + int tag = (Integer) itemView.getTag(); + if (tag == 0) { + + } else if (tag == 1 || tag == 3 || tag == 5) { + fm_read4_tv_label = (TextView) itemView.findViewById(R.id.fm_read4_tv_label); + } else if (tag == 2 || tag == 4) { + fm_read4_rv_grid = (RecyclerView) itemView.findViewById(R.id.fm_read4_rv_grid); + fm_read4_rv_grid.setHasFixedSize(true); + fm_read4_rv_grid.setLayoutManager(new GridLayoutManager(context, 2)); + } else { + news_type = (TextView) itemView.findViewById(R.id.news_type); + news_title = (TextView) itemView.findViewById(R.id.news_title); + } + + } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.plugin1_autoscrollviewpager_viewholder, parent, false); - return null; + RecyclerView.ViewHolder viewHolder; + if (viewType == 0) { + ImageView imageView = new ImageView(parent.getContext()); + DisplayMetrics outMetrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + int height = (int) (outMetrics.widthPixels / 5f); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, height); + imageView.setLayoutParams(params); + imageView.setImageResource(R.drawable.hero); + imageView.setTag(viewType); + viewHolder = new Read4ViewHolder(imageView); + } else if (viewType == 1 || viewType == 3 || viewType == 5) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read4_label, parent, false); + view.setTag(viewType); + viewHolder = new Read4ViewHolder(view); + } else if (viewType == 2 || viewType == 4) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read4_grid, parent, false); + RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.fm_read4_rv_grid); + int height; + if (viewType == 2) { + height = 2 * DisplayUtils.dip2px(context, 66); + } else { + height = DisplayUtils.dip2px(context, 66); + } + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, height); + recyclerView.setLayoutParams(params); + view.setTag(viewType); + viewHolder = new Read4ViewHolder(view); + } else if (viewType > 5 && viewType<= newsList.size() + 5) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.home_list_item_newsnormal_type, parent, false); + view.setTag(viewType); + viewHolder = new Read4ViewHolder(view); + } else { + viewHolder = new FooterViewHolder(LayoutInflater.from(parent.getContext()).inflate( + R.layout.refresh_footerview, parent, false)); + } + return viewHolder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof Read4ViewHolder) { + Read4ViewHolder viewHolder = (Read4ViewHolder) holder; + if (position == 0) { + } else if (position == 1 || position == 3 || position == 5) { + String[] label = {"", "我的游戏", "", "猜你喜欢", "", "最新发布"}; + viewHolder.fm_read4_tv_label.setText(label[position]); + } else if (position == 2 || position == 4) { + if (position == 2) { + viewHolder.fm_read4_rv_grid.setAdapter(new Read4GridAdapter(context, myGameList)); + } else { + viewHolder.fm_read4_rv_grid.setAdapter(new Read4GridAdapter(context, likeGameList)); + } + } else { + NewsEntity newsEntity = newsList.get(position - 6); + viewHolder.news_type.setBackgroundResource(NewsUtils + .getDrawableIdByType(newsEntity.getType())); + viewHolder.news_type.setText(newsEntity.getType()); + viewHolder.news_title.setText(newsEntity.getTitle()); + viewHolder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + } + }); + } + } else if (holder instanceof FooterViewHolder) { + FooterViewHolder viewHolder = (FooterViewHolder) holder; + viewHolder.footerview_progressbar.setVisibility(View.GONE); + viewHolder.footerview_tv_loading.setText("点击加载更多"); + viewHolder.rootView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addList(newsList.size()); + } + }); + } } @Override public int getItemCount() { - return 0; + int count = 1; + if (myGameList.size() != 0) { + count += 2; + } + if (likeGameList.size() != 0) { + count += 2; + } + if (newsList.size() != 0) { + count += 1 + newsList.size(); + } + return count + 1; } @Override public int getItemViewType(int position) { return position; } + + private class Read4GridViewHolder extends RecyclerView.ViewHolder { + + private View view; + private ImageView fm_read4_iv_icon; + private TextView fm_read4_tv_name; + private TextView fm_read4_tv_des; + + public Read4GridViewHolder(View itemView) { + super(itemView); + + view = itemView; + fm_read4_iv_icon = (ImageView) itemView.findViewById(R.id.fm_read4_iv_icon); + fm_read4_tv_name = (TextView) itemView.findViewById(R.id.fm_read4_tv_name); + fm_read4_tv_des = (TextView) itemView.findViewById(R.id.fm_read4_tv_des); + + } + } + + private class Read4GridAdapter extends RecyclerView.Adapter { + + private Context mContext; + private List mGameList; + + public Read4GridAdapter(Context context, List list) { + mContext = context; + mGameList = list; + } + + @Override + public Read4GridViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + if (viewType == 3) { + view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read4_grid_more, parent, false); + } else { + view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.fm_read4_grid_item, parent, false); + } + return new Read4GridViewHolder(view); + } + + @Override + public void onBindViewHolder(Read4GridViewHolder holder, int position) { + if (position != 3) { + GameEntity gameEntity = mGameList.get(position); + ImageUtils.getInstance(mContext).display(gameEntity.getIcon(), holder.fm_read4_iv_icon); + holder.fm_read4_tv_name.setText(gameEntity.getName()); + String des = gameEntity.getBrief(); + holder.fm_read4_tv_des.setText(des.substring(0, des.length() > 8 ? 8 : des.length())); + holder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + } + }); + } else { + holder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + } + }); + } + } + + @Override + public int getItemCount() { + return mGameList.size(); + } + + @Override + public int getItemViewType(int position) { + return position; + } + } + } diff --git a/app/src/main/java/com/gh/gamecenter/read/ReadFragment.java b/app/src/main/java/com/gh/gamecenter/read/ReadFragment.java index 057c08e053..2dde5022de 100644 --- a/app/src/main/java/com/gh/gamecenter/read/ReadFragment.java +++ b/app/src/main/java/com/gh/gamecenter/read/ReadFragment.java @@ -91,6 +91,10 @@ public class ReadFragment extends Fragment implements View.OnClickListener, View fm_read_yuanchuang = (TextView) view.findViewById(R.id.fm_read_yuanchuang); fm_read_zixun = (TextView) view.findViewById(R.id.fm_read_zixun); fm_read_gonglue = (TextView) view.findViewById(R.id.fm_read_gonglue); + fm_read_tuijian.setOnClickListener(this); + fm_read_yuanchuang.setOnClickListener(this); + fm_read_zixun.setOnClickListener(this); + fm_read_gonglue.setOnClickListener(this); fm_vp_content = (ViewPager) view.findViewById(R.id.fm_vp_content); fm_vp_content.setAdapter(new FragmentAdapter(getChildFragmentManager())); @@ -218,6 +222,14 @@ public class ReadFragment extends Fragment implements View.OnClickListener, View } else if (id == R.id.menu_rl_set) { popWindow.dismiss(); startActivity(new Intent(getActivity(), SettingActivity.class)); + } else if (id == R.id.fm_read_tuijian) { + fm_vp_content.setCurrentItem(0); + } else if (id == R.id.fm_read_yuanchuang) { + fm_vp_content.setCurrentItem(1); + } else if (id == R.id.fm_read_zixun) { + fm_vp_content.setCurrentItem(2); + } else if (id == R.id.fm_read_gonglue) { + fm_vp_content.setCurrentItem(3); } } diff --git a/app/src/main/java/com/gh/gamecenter/read/ReadViewHolder.java b/app/src/main/java/com/gh/gamecenter/read/ReadViewHolder.java new file mode 100644 index 0000000000..8e052bba77 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/read/ReadViewHolder.java @@ -0,0 +1,36 @@ +package com.gh.gamecenter.read; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gh.gamecenter.R; + +/** + * Created by LGT on 2016/6/6. + */ +public class ReadViewHolder extends RecyclerView.ViewHolder { + + public View view; + + public ImageView fm_read_iv_thumb; + public TextView fm_read_tv_title; + public TextView fm_read_tv_time; + public LinearLayout fm_read_ll_read; + public TextView fm_read_tv_read; + public TextView fm_read_tv_type; + + public ReadViewHolder(View itemView) { + super(itemView); + view = itemView; + fm_read_iv_thumb = (ImageView) itemView.findViewById(R.id.fm_read_iv_thumb); + fm_read_tv_title = (TextView) itemView.findViewById(R.id.fm_read_tv_title); + fm_read_tv_time = (TextView) itemView.findViewById(R.id.fm_read_tv_time); + fm_read_ll_read = (LinearLayout) itemView.findViewById(R.id.fm_read_ll_read); + fm_read_tv_read = (TextView) itemView.findViewById(R.id.fm_read_tv_read); + fm_read_tv_type = (TextView) itemView.findViewById(R.id.fm_read_tv_type); + } + +} diff --git a/app/src/main/res/drawable-hdpi/fm_read_more.png b/app/src/main/res/drawable-hdpi/fm_read_more.png new file mode 100644 index 0000000000..86fbca9a2e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/fm_read_more.png differ diff --git a/app/src/main/res/drawable-hdpi/home4_selected.png b/app/src/main/res/drawable-hdpi/home4_selected.png new file mode 100644 index 0000000000..55720779f2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home4_selected.png differ diff --git a/app/src/main/res/drawable-hdpi/home4_unselected.png b/app/src/main/res/drawable-hdpi/home4_unselected.png new file mode 100644 index 0000000000..a54c3daf35 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home4_unselected.png differ diff --git a/app/src/main/res/drawable-hdpi/read_eye.png b/app/src/main/res/drawable-hdpi/read_eye.png new file mode 100644 index 0000000000..7f7439d604 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/read_eye.png differ diff --git a/app/src/main/res/drawable-hdpi/read_time_ago.png b/app/src/main/res/drawable-hdpi/read_time_ago.png new file mode 100644 index 0000000000..ef45c7164f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/read_time_ago.png differ diff --git a/app/src/main/res/drawable-xhdpi/hero.png b/app/src/main/res/drawable-xhdpi/hero.png new file mode 100644 index 0000000000..8b0b3ce871 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/hero.png differ diff --git a/app/src/main/res/drawable/oval_type_red_bg.xml b/app/src/main/res/drawable/oval_type_red_bg.xml new file mode 100644 index 0000000000..bfd2bc3daa --- /dev/null +++ b/app/src/main/res/drawable/oval_type_red_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/oval_white_hint_dn.xml b/app/src/main/res/drawable/oval_white_hint_dn.xml new file mode 100644 index 0000000000..46ddfbe9ef --- /dev/null +++ b/app/src/main/res/drawable/oval_white_hint_dn.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/oval_white_hint_up.xml b/app/src/main/res/drawable/oval_white_hint_up.xml new file mode 100644 index 0000000000..a2387b4266 --- /dev/null +++ b/app/src/main/res/drawable/oval_white_hint_up.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read1_slide.xml b/app/src/main/res/layout/fm_read1_slide.xml new file mode 100644 index 0000000000..28f9f52f7f --- /dev/null +++ b/app/src/main/res/layout/fm_read1_slide.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read2_special1.xml b/app/src/main/res/layout/fm_read2_special1.xml new file mode 100644 index 0000000000..999df8b96e --- /dev/null +++ b/app/src/main/res/layout/fm_read2_special1.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read2_special2.xml b/app/src/main/res/layout/fm_read2_special2.xml new file mode 100644 index 0000000000..b80781d740 --- /dev/null +++ b/app/src/main/res/layout/fm_read2_special2.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read4_grid.xml b/app/src/main/res/layout/fm_read4_grid.xml new file mode 100644 index 0000000000..291ba3e760 --- /dev/null +++ b/app/src/main/res/layout/fm_read4_grid.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read4_grid_item.xml b/app/src/main/res/layout/fm_read4_grid_item.xml new file mode 100644 index 0000000000..6df907570a --- /dev/null +++ b/app/src/main/res/layout/fm_read4_grid_item.xml @@ -0,0 +1,38 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read4_grid_more.xml b/app/src/main/res/layout/fm_read4_grid_more.xml new file mode 100644 index 0000000000..470dc83b70 --- /dev/null +++ b/app/src/main/res/layout/fm_read4_grid_more.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read4_label.xml b/app/src/main/res/layout/fm_read4_label.xml new file mode 100644 index 0000000000..38a1648f41 --- /dev/null +++ b/app/src/main/res/layout/fm_read4_label.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read_item.xml b/app/src/main/res/layout/fm_read_item.xml new file mode 100644 index 0000000000..7b0dc9dfb9 --- /dev/null +++ b/app/src/main/res/layout/fm_read_item.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/read_fragment.xml b/app/src/main/res/layout/read_fragment.xml index df05aa628e..3b43449f21 100644 --- a/app/src/main/res/layout/read_fragment.xml +++ b/app/src/main/res/layout/read_fragment.xml @@ -6,56 +6,64 @@ - - + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="#FFFFFF"> - + - + - + - + + + + + + +