自定义一个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); //向右翻一页