如何以编程方式滚动动画

Sam*_*rai 9 animation android gallery

我正在尝试以编程方式为库实现滚动动画.

试过,setSelection(int pos, Boolean animate)它不起作用.

无论如何都有覆盖setSelection()方法.

ple*_*ock 12

刚才我遇到了这个问题.我只需要移动画廊中的一个元素,所以对我来说最好的解决方案是模拟关键事件

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
Run Code Online (Sandbox Code Playgroud)

要么

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
Run Code Online (Sandbox Code Playgroud)


Sam*_*rai 6

Gallery.setSelection(int position,boolean animate);

请参阅以下网址:http: //groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf/7f89e53ae53e455b?lnk=gst&q=setselection#7f89e53ae53e455b

Soln:如果你还在寻找,我有两种可能的解决方案,两者都有些不愉快:

(1)您可以使画廊以选定的速度进行投掷,因此:

myGallery.onFling(null,null,velocity,0);

通过调整速度,您可以设置值以在任一方向上将选择移动一或两个.由于画廊自我中心,您不需要完全正确的目的地.

(2)由于Gallery源可用,您可以对其进行修改以实现自己的Gallery.看起来好像你需要添加很多代码才能控制一个fling,以便以你选择的选择结束.

我以为我将要做(2),但发现我可以逃避(1)我的问题.


who*_*who 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);       
}
Run Code Online (Sandbox Code Playgroud)