事件处理
@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();
}
本文详细解析了在Android开发中如何处理触摸事件,并通过MotionEvent实现视图的平移动画,包括下拉刷新和上拉加载更多功能的动画效果。文章深入探讨了不同触摸事件的响应逻辑,以及如何使用ObjectAnimator进行旋转动画的制作。
4937

被折叠的 条评论
为什么被折叠?



