下面列出了android.view.View#scrollBy ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 滚动dx, dy
*
* @param dx
* @param dy
* @return
*/
public UDView scrollBy(int dx, int dy) {
View view = getView();
if (view != null) {
view.scrollBy(dx, dy);
}
return this;
}
public static boolean scrollCompat(View view, float deltaY) {
if (view instanceof WebView
|| view instanceof HorizontalScrollView
|| ViewCatcherUtil.isRecyclerView(view)) {
view.scrollBy((int) deltaY, 0);
return true;
}
return false;
}
public static void scrollAViewBy(View view, int height) {
if (view instanceof RecyclerView) ((RecyclerView) view).scrollBy(0, height);
else if (view instanceof ScrollView) ((ScrollView) view).smoothScrollBy(0, height);
else if (view instanceof AbsListView) ((AbsListView) view).smoothScrollBy(height, 0);
else {
try {
Method method = view.getClass().getDeclaredMethod("smoothScrollBy", Integer.class, Integer.class);
method.invoke(view, 0, height);
} catch (Exception e) {
view.scrollBy(0, height);
}
}
}
public static void scrollAViewBy(View view, int height) {
if (view instanceof RecyclerView) ((RecyclerView) view).scrollBy(0, height);
else if (view instanceof ScrollView) ((ScrollView) view).smoothScrollBy(0, height);
else if (view instanceof AbsListView) ((AbsListView) view).smoothScrollBy(height, 0);
else {
try {
Method method = view.getClass().getDeclaredMethod("smoothScrollBy", Integer.class, Integer.class);
method.invoke(view, 0, height);
} catch (Exception e) {
view.scrollBy(0, height);
}
}
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (mUseSliderMode) {
float curX;
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
mDeclineButton.setVisibility(View.GONE);
mAnswerX = motionEvent.getX() - mRoot.getWidth();
mBegin = true;
mOldSize = 0;
break;
case MotionEvent.ACTION_MOVE:
curX = motionEvent.getX() - mRoot.getWidth();
view.scrollBy((int) (mAnswerX - curX), view.getScrollY());
mOldSize -= mAnswerX - curX;
mAnswerX = curX;
if (mOldSize < -25) mBegin = false;
if (curX < (mScreenWidth / 4) - mRoot.getWidth() && !mBegin) {
performClick();
return true;
}
break;
case MotionEvent.ACTION_UP:
mDeclineButton.setVisibility(View.VISIBLE);
view.scrollTo(0, view.getScrollY());
break;
}
return true;
}
return false;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (mUseSliderMode) {
float curX;
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
mAnswerButton.setVisibility(View.GONE);
mDeclineX = motionEvent.getX();
break;
case MotionEvent.ACTION_MOVE:
curX = motionEvent.getX();
view.scrollBy((int) (mDeclineX - curX), view.getScrollY());
mDeclineX = curX;
if (curX > (3 * mScreenWidth / 4)) {
performClick();
return true;
}
break;
case MotionEvent.ACTION_UP:
mAnswerButton.setVisibility(View.VISIBLE);
view.scrollTo(0, view.getScrollY());
break;
}
return true;
}
return false;
}
public static boolean scrollCompat(View view, float deltaY) {
if (view != null) {
if (view instanceof AbsListView) {
final AbsListView absListView = (AbsListView) view;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
absListView.scrollListBy((int) deltaY);
} else if (absListView instanceof ListView) {
// {@link android.support.v4.widget.ListViewCompat#scrollListBy(ListView,
// int)}
final ListView listView = (ListView) absListView;
final int firstPosition = listView.getFirstVisiblePosition();
if (firstPosition == ListView.INVALID_POSITION) {
return false;
}
final View firstView = listView.getChildAt(0);
if (firstView == null) {
return false;
}
final int newTop = (int) (firstView.getTop() - deltaY);
listView.setSelectionFromTop(firstPosition, newTop);
} else {
absListView.smoothScrollBy((int) deltaY, 0);
}
return true;
} else if (view instanceof WebView
|| view instanceof ScrollView
|| view instanceof NestedScrollView) {
view.scrollBy(0, (int) deltaY);
return true;
} else if (ViewCatcherUtil.isRecyclerView(view)) {
RecyclerView recyclerView = (RecyclerView) view;
if (!(recyclerView.getOnFlingListener() instanceof PagerSnapHelper)) {
// Fix the problem of adding new data to RecyclerView while in Fling state,
// the new items will continue to Fling
if (recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_SETTLING) {
recyclerView.stopScroll();
}
view.scrollBy(0, (int) deltaY);
}
return true;
}
}
return false;
}
/**
* View 内部滚动位置 - 相对于上次移动的最后位置移动
* <pre>
* 无滚动过程
* </pre>
* @param view {@link View}
* @param x X 轴开始坐标
* @param y Y 轴开始坐标
* @return {@link View}
*/
public static View scrollBy(final View view, final int x, final int y) {
if (view != null) view.scrollBy(x, y);
return view;
}