1.默认Gallery的滚动轻轻一滑动就会滚动好多张图片 通过重写onFling方法返回false可以解决
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; }
2.解决每次只滚动一张图片后 又会发现 手指滑动很长才能滑动到下一张 有时候还滑不过去 这时需要这样写
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { int kEvent; if (isScrollingLeft(e1, e2)) { kEvent = KeyEvent.KEYCODE_DPAD_LEFT; } else { kEvent = KeyEvent.KEYCODE_DPAD_RIGHT; } onKeyDown(kEvent, null); return false; } private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) { return e2.getX() > e1.getX(); }
3.如何通过按钮来让Gallery滚动
/* * 只是部分代码 * rightBtn是下一页按钮对象 * leftBtn是上一页按钮对象 * customGallery是自定义Gallery对象 */ rightBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { customGallery.onScroll(null, null, 1 * (20+500), 0); customGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); } }); leftBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { customGallery.onScroll(null, null, -1 * (20+500), 0); customGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); } });
4.怎么取消Gallery手指滑动滚动 如果只希望通过按钮滚动 不想通过手指滑动可能就会需要这样做
private boolean stuck = false; public CustomGallery(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public CustomGallery(Context context, AttributeSet attrs) { super(context, attrs); } public CustomGallery(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { return stuck || super.onTouchEvent(event); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: case KeyEvent.KEYCODE_DPAD_RIGHT: return stuck || super.onKeyDown(keyCode, event); } return super.onKeyDown(keyCode, event); } public void setScrollingEnabled(boolean enabled) { stuck = !enabled; }然后在实例化自定义Gallery调用setScrollingEnabled方法来控制是否可以用手指滑动
customGallery = (CustomGallery) findViewById(R.id.customGallery); customGallery.setScrollingEnabled(false);//取消滑动
5.结合3和4 就可以实现只通过按钮来控制图片的滚动
/* * 只是部分代码 * rightBtn是下一页按钮对象 * leftBtn是上一页按钮对象 * customGallery是自定义Gallery对象 */ rightBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { customGallery.setScrollingEnabled(true); customGallery.onScroll(null, null, 1 * (20+500), 0); customGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); customGallery.setScrollingEnabled(false); } }); leftBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { customGallery.setScrollingEnabled(true); customGallery.onScroll(null, null, -1 * (20+500), 0); customGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); customGallery.setScrollingEnabled(false); } });