android 簡單上拉下拉重新整理功能
阿新 • • 發佈:2019-01-10
事件處理
@Override public boolean onTouch(View v, MotionEvent event) { float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_MOVE: lastY = guanErRecydlerview.lastY; float offsetY = y - lastY; if (mCurrentPage == 0) { if (offsetY >= 700) break; tvLoadRefresh.setText("鬆手重新整理"); loadHeader.animate().translationY(offsetY / 4).setDuration(0).start(); } else if (mCurrentPage == scrollHelper.getPageCount() - 1 && page < maxPageNum) { if (Math.abs(offsetY) >= 700) break; loadFooter.animate().translationY(offsetY / 4).setDuration(0).start(); } break; case MotionEvent.ACTION_UP: lastY = guanErRecydlerview.lastY; offsetY = y - lastY; if (mCurrentPage == 0) { if (offsetY > 700) { tvLoadRefresh.setText("載入中"); loadRefresh(); startLoadAnimation(false); } else { loadHeader.animate().translationY(0).setDuration(100).start(); } } else if (mCurrentPage == scrollHelper.getPageCount() - 1) { if (offsetY < -700 && page < maxPageNum) { loadMore(); startLoadAnimation(true); } else { loadFooter.animate().translationY(0).setDuration(100).start(); } } break; } return false; }
loadHeader
private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1000: if (objectAnimator != null) { objectAnimator.end(); loadHeader.animate().translationY(0).setDuration(100).start(); } break; case 1001: if (objectAnimator != null) { objectAnimator.end(); loadFooter.animate().translationY(0).setDuration(100).start(); } } } };
hander
Api.getList(activity, token, page + "", new CallbackHttp() { @Override public void onResult(boolean isSuccess, int code, String msg, String result) { tvLoadRefresh.setText("下拉載入"); Message message = new Message(); if (isFirstLoading) { message.what = 1000; } else { message.what = 1001; } mHandler.sendMessageDelayed(message, 0); if (isSuccess) { ............
重新整理動畫
private void startLoadAnimation(boolean isloadMore) {
if (isloadMore) {
objectAnimator = ObjectAnimator.ofFloat(ivLoadMore, "rotation", 0, 360);
} else {
objectAnimator = ObjectAnimator.ofFloat(ivLoadRefresh, "rotation", 0, 360);
}
objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
}
});
objectAnimator.setDuration(500);
objectAnimator.setRepeatCount(2000);
objectAnimator.start();
}