自定义一个HorizontalScrollView类,主要为了让这个HorizontalScrollView不能鼠标点击,不能左右按键,并且没有焦点。
public class ImageMoveHorizontalScrollView extends HorizontalScrollView { private boolean mSmoothScrollingEnabled = true; private final Rect mTempRect = new Rect(); public ImageMoveHorizontalScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public ImageMoveHorizontalScrollView(Context context) { super(context); } /** * 关闭鼠标点击的效果,重写该方法 */ @Override public boolean onTouchEvent(MotionEvent ev) { return false; } /** * 关闭左右按键效果,重写该方法 */ @Override public boolean executeKeyEvent(KeyEvent event) { return false; } /** * 去除焦点选中 */ @Override public boolean pageScroll(int direction) { boolean right = direction == View.FOCUS_RIGHT; int width = getWidth(); if (right) { mTempRect.left = getScrollX() + width; int count = getChildCount(); if (count > 0) { View view = getChildAt(0); if (mTempRect.left + width > view.getRight()) { mTempRect.left = view.getRight() - width; } } } else { mTempRect.left = getScrollX() - width; if (mTempRect.left < 0) { mTempRect.left = 0; } } mTempRect.right = mTempRect.left + width; return scrollAndFocus(direction, mTempRect.left, mTempRect.right); } private boolean scrollAndFocus(int direction, int left, int right) { boolean handled = true; int width = getWidth(); int containerLeft = getScrollX(); int containerRight = containerLeft + width; boolean goLeft = direction == View.FOCUS_LEFT;//主要在这边,注释掉下面的代码 // View newFocused = findFocusableViewInBounds(goLeft, left, right); // if (newFocused == null) { // newFocused = this; // } if (left >= containerLeft && right <= containerRight) { handled = false; } else { int delta = goLeft ? (left - containerLeft) : (right - containerRight); doScrollX(delta); } //去除 滚动后 foucus的 // if (newFocused != findFocus()) // newFocused.requestFocus(direction); return handled; } /** * Smooth scroll by a X delta * @param delta the number of pixels to scroll by on the X axis */ private void doScrollX(int delta) { if (delta != 0) { if (mSmoothScrollingEnabled) { smoothScrollBy(delta, 0); } else { scrollBy(delta, 0); } } }}
使用:
sc.pageScroll(View.FOCUS_RIGHT); //向右翻一页