修改游戏详情空白页优化, 开服表修改部分显示规则和增加滑动动画

This commit is contained in:
kehaoyuan
2017-05-17 14:47:00 +08:00
parent 6d4de6795e
commit 4f99477d83
3 changed files with 72 additions and 15 deletions

View File

@ -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