From 4f99477d83f032ce7e378b0d0d2e15b6b43ddfc4 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Wed, 17 May 2017 14:47:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B8=B8=E6=88=8F=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E7=A9=BA=E7=99=BD=E9=A1=B5=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=20=E5=BC=80=E6=9C=8D=E8=A1=A8=E4=BF=AE=E6=94=B9=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=98=BE=E7=A4=BA=E8=A7=84=E5=88=99=E5=92=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=BB=91=E5=8A=A8=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/gamecenter/KaiFuActivity.java | 60 ++++++++++++++---- .../gh/gamecenter/gamedetail/FuLiAdapter.java | 27 +++++++- .../scan_receiver.gif | Bin 3 files changed, 72 insertions(+), 15 deletions(-) rename app/src/main/res/{drawable-nodpi => drawable-hdpi}/scan_receiver.gif (100%) diff --git a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java index 97bedee607..a5ac6c92c2 100644 --- a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java +++ b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java @@ -4,6 +4,7 @@ import android.animation.Animator; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; @@ -14,7 +15,6 @@ import butterknife.BindView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.BaseActivity; import com.gh.common.util.DownloadItemUtils; -import com.gh.common.util.Utils; import com.gh.common.view.VerticalItemDecoration; import com.gh.download.*; import com.gh.gamecenter.adapter.KaiFuAdapter; @@ -64,6 +64,7 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.On private boolean isEverpause = false; private boolean move = false; + private boolean smoothMove = false; private String kaifuType; @@ -122,11 +123,13 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.On mAdapter = new KaiFuAdapter(this, this, this, kaifuType); layoutManager = new LinearLayoutManager(this); + ((DefaultItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false); mRecyclerView.addItemDecoration(new VerticalItemDecoration(this, 8, false)); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setAdapter(mAdapter); mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); @@ -143,6 +146,15 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.On @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); + if (smoothMove && newState == RecyclerView.SCROLL_STATE_IDLE){ + smoothMove = false; + int n = mMovePosition - layoutManager.findFirstVisibleItemPosition(); + if ( 0 <= n && n < mRecyclerView.getChildCount()){ + int top = layoutManager.findViewByPosition(n).getTop(); + mRecyclerView.smoothScrollBy(0, top); + } + } + //上拉加载 if (mAdapter.isLoadedBottom() && newState == RecyclerView.SCROLL_STATE_IDLE && mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) { @@ -200,15 +212,21 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.On if (kaifuOffset == 0 && mInitMovePosition < 4) { mMovePosition =0; } else { - mMovePosition = mInitMovePosition + mAdapter.getLoadCountTop() - 24; + mMovePosition = mInitMovePosition + mAdapter.getLoadCountTop() - 25; } - moveToPosition(mMovePosition); } else { mChangeName.setText("即将开服↑"); mChangeName.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.content)); mChangeRl.setBackgroundResource(R.drawable.border_suggest_bg); mMovePosition = mInitMovePosition + mAdapter.getLoadCountTop() - 20; - moveToPosition(mMovePosition); + if (mMovePosition < 0) { + mMovePosition = mInitMovePosition; + } + } + + if (mInitMovePosition != 1) { + mRecyclerView.stopScroll(); + moveToPosition(mMovePosition, true); } } }); @@ -279,7 +297,6 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.On kaifuOffset = 0; kaifuType = tag; - Utils.log("==========load"); mRecyclerView.setVisibility(View.VISIBLE); mPbLoading.setVisibility(View.VISIBLE); @@ -288,6 +305,10 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.On mAdapter = new KaiFuAdapter(this, this, this, kaifuType); mRecyclerView.setAdapter(mAdapter); + + mChangeName.setText("即将开服↑"); + mChangeName.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.content)); + mChangeRl.setBackgroundResource(R.drawable.border_suggest_bg); } public void isShowPopupBg(boolean isShow) { @@ -446,25 +467,38 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.On DownloadManager.getInstance(getApplicationContext()).removeObserver(dataWatcher); } - private void moveToPosition(int n) { + private void moveToPosition(int n, boolean isSmooth) { int firstItem = layoutManager.findFirstVisibleItemPosition(); int lastItem = layoutManager.findLastVisibleItemPosition(); if (n <= firstItem) { - mRecyclerView.scrollToPosition(n); + if (isSmooth) { + mRecyclerView.smoothScrollToPosition(n); + } else { + mRecyclerView.scrollToPosition(n); + } } else if (n <= lastItem) { - int top = mRecyclerView.getChildAt(n - firstItem).getTop(); - mRecyclerView.scrollBy(0, top); + int top = layoutManager.findViewByPosition(n).getTop(); + if (isSmooth) { + mRecyclerView.smoothScrollBy(0, top); + } else { + mRecyclerView.scrollBy(0, top); + } } else { - mRecyclerView.scrollToPosition(n); - move = true; + if (isSmooth) { + mRecyclerView.smoothScrollToPosition(n); + smoothMove = true; + } else { + mRecyclerView.scrollToPosition(n); + move = true; + } } } @Override public void onScroll(int scrollPosition) { - mInitMovePosition = scrollPosition + getGameEntityIndex(); - moveToPosition(mInitMovePosition); + mInitMovePosition = scrollPosition + getGameEntityIndex() + 1; + moveToPosition(mInitMovePosition, false); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java index ff1f4f31ee..86d5ac13c1 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java @@ -38,6 +38,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; /** * Created by khy on 2017/3/27. @@ -94,7 +96,13 @@ public class FuLiAdapter extends BaseRecyclerAdapter { && (mGameDetailEntity.getKaiFuServer() == null || (mGameDetailEntity.getKaiFuServer() != null && mGameDetailEntity.getKaiFuServer().size() == 0))) { - EventBus.getDefault().post(new EBReuse(GameDetailActivity.SKIP_XINXI)); + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + EventBus.getDefault().post(new EBReuse(GameDetailActivity.SKIP_XINXI)); + } + }, 500); } mGameDetailEntity.setNews(response); @@ -231,8 +239,16 @@ public class FuLiAdapter extends BaseRecyclerAdapter { return new BottomViewHolder(layout); case 7: view = mLayoutInflater.inflate(R.layout.reuse_none_data, parent, false); - View content = view.findViewById(R.id.reuse_none_data); + LinearLayout content = (LinearLayout) view.findViewById(R.id.reuse_none_data); content.setVisibility(View.VISIBLE); + + TextView tv = new TextView(mContext); + tv.setText("查看游戏介绍→"); + tv.setGravity(Gravity.CENTER); + tv.setPadding(0, DisplayUtils.dip2px(mContext, 8), 0, DisplayUtils.dip2px(mContext, 80)); + tv.setTextColor(ContextCompat.getColor(mContext, R.color.c7c7c7)); + + content.addView(tv); return new ReuseViewHolder(view); } return null; @@ -257,6 +273,13 @@ public class FuLiAdapter extends BaseRecyclerAdapter { } else if (holder instanceof GameDetailKaiFuViewHolder) { GameDetailKaiFuViewHolder viewHolder = (GameDetailKaiFuViewHolder) holder; initKaiFuViewHolder(viewHolder); + } else if (holder instanceof ReuseViewHolder) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EventBus.getDefault().post(new EBReuse(GameDetailActivity.SKIP_XINXI)); + } + }); } else if (holder instanceof BottomViewHolder) { BottomViewHolder viewHolder = (BottomViewHolder) holder; diff --git a/app/src/main/res/drawable-nodpi/scan_receiver.gif b/app/src/main/res/drawable-hdpi/scan_receiver.gif similarity index 100% rename from app/src/main/res/drawable-nodpi/scan_receiver.gif rename to app/src/main/res/drawable-hdpi/scan_receiver.gif