/**
* 焦点自动滚动到屏幕中间位置
*/
private void autoScrollListener(View view) {
DisplayMetrics outMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getRealMetrics(outMetrics); int widthPixel = outMetrics.widthPixels; heightPixel = outMetrics.heightPixels;
view.getViewTreeObserver()
.addOnGlobalFocusChangeListener((oldFocus, newFocus) -> {
if (newFocus != null) {
int[] ints = new int[2];
newFocus.getLocationInWindow(ints);
int viewCenter = Math.round((newFocus.getHeight() >> 1) + ints[1]);//当前获取焦点的view中心
int screenCenter = Math.round(heightPixel >> 1);//屏幕中心
int i = viewCenter - screenCenter;//当前焦点view到中心的距离
if (i < 0) {
pageScroll(i);
} else {
pageScroll(i);
}
int[] mllInts = new int[2];
view.getLocationInWindow(mllInts);
}
});
}
/**
* 手动滚动页面
*/
private void pageScroll(int offset) {
if (Math.abs(offset) < 200) {
//距离小于200不动
return;
}
mHandler.post(() -> {
if (pageDownObjectAnimator != null && pageDownObjectAnimator.isRunning()) {
pageDownObjectAnimator.cancel();
}
int[] ints = new int[2];
findViewById(R.id.ll_scroll).getLocationOnScreen(ints);
int end = ints[1] - offset;
if (end < -3000) {
end = -3000;//极限距离
} else if (end > 0) {
end = 0;
}
pageDownObjectAnimator = ObjectAnimator
.ofFloat(findViewById(R.id.ll_scroll), "translationY", ints[1], end);
pageDownObjectAnimator.setDuration(250);
pageDownObjectAnimator.start();
});
}