我正在尝试以编程方式为图库实现滚动动画。
尝试使用setSelection(int pos, Boolean animate)
并且无效。
无论如何都要覆盖setSelection()
方法。
答案 0 :(得分:12)
刚才我遇到了这个问题。我只需移动画廊的一个元素,所以对我来说最好的解决方案是模拟按键事件
myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
或
myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
答案 1 :(得分:6)
Gallery.setSelection(int position,boolean animate);
溶液: 如果您还在寻找,我可以为您提供两种可能的解决方案 有点不愉快:
(1)你可以让画廊以选定的速度进行投掷,因此:
myGallery.onFling(null,null,velocity,0);
通过调整速度,您可以设置值以移动选区 两个方向中的一个或两个。作为画廊的自我中心,你做到了 不需要完全正确的目的地。
(2)由于Gallery源可用,您可以修改它 实现自己的图库。它看起来不像你需要添加 很多代码能够控制投掷以便以你选择的结束 选择。
我以为我必须做(2),但发现我可以逃脱 (1)为我的问题。
答案 2 :(得分:6)
基于Kurru对模拟点击下一个或上一个视图的出色思考。
//scroll forward or backward
private void scroll(int type){
View selectedV = mG.getSelectedView();
int idx = mG.indexOfChild(selectedV);
switch(type){
case FORWARD:
default:
if(idx<mG.getChildCount()-1)
idx++;
break;
case BACKWARD:
if(idx>0)
idx--;
break;
}
//now scrolled view's child idx in gallery is gotten
View nextView = mG.getChildAt(idx);
//(x,y) in scrolled view is gotten
int x = nextView.getLeft()+nextView.getWidth()/2;
int y = nextView.getTop()+nextView.getHeight()/2;
String out = String.format("x=%d, y=%d", x, y);
Log.i(TAG+".scroll", out);
//Kurru's simulating clicking view
MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0);
mG.onDown(event);
boolean res = mG.onSingleTapUp(null);
Log.i(TAG+".scroll", "onSingleTapUp return =" + res);
}
答案 3 :(得分:2)
我正在查看图库来源,看看我是否可以获得此功能。看起来这个代码有可能实现。但是在我开始工作之前我放弃了。好像我没有传递正确的坐标所以res总是返回false。如果有效,将返回true。
只是在这里张贴这个,以防其他人想要解决这个问题! (如果您管理它,请发布您的解决方案!)
Rect rect = new Rect();
gallery.getHitRect(rect);
int x = rect.centerX()+getWindowManager().getDefaultDisplay().getWidth();
int y = rect.centerY();
MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0);
timesGallery.onDown(event);
boolean res = timesGallery.onSingleTapUp(null);
答案 4 :(得分:2)
我对“Kurru”给出的代码做了一点改动。现在正在运作
Rect rect = new Rect();
gallery.getHitRect(rect);
int width = Math.abs(rect.width());
if(!isForwardScroll){
width = width * -1;
}
int x = rect.centerX()+width/2;
int y = rect.centerY();
MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0);
gallery.onDown(event);
boolean res = gallery.onSingleTapUp(null);