Android:Scroller动画?

Ken*_*Cal 12 animation android scroll scroller

我是Android开发的新手,我只想了解一下Scroller小部件(android.widget.Scroller).它如何为视图制作动画?可以访问动画对象(如果存在)吗?如果是这样,怎么样?我已经阅读了源代码,但没有找到线索,或者我可能太新了?

我只是想在Scroller完成滚动之后做一些操作,比如说

m_scroller.getAnimation().setAnimationListener(...);
Run Code Online (Sandbox Code Playgroud)

Bil*_*ips 40

Scroller小部件实际上并没有为您完成大部分工作.它不会触发任何回调,它不会动画任何东西,它只响应各种方法调用.

那有什么用呢?好吧,它完成了所有的计算,例如为你投掷,这很方便.所以你通常要做的就是创建一个Runnable,它反复询问Scroller,"我现在的卷轴位置应该是什么?我们是否完成了投掷?" 然后你在Handler上重新发布runnable(通常在View上),直到完成一次.

这是我正在研究的片段中的一个例子:

private class Flinger implements Runnable {
    private final Scroller scroller;

    private int lastX = 0;

    Flinger() {
        scroller = new Scroller(getActivity());
    }

    void start(int initialVelocity) {
        int initialX = scrollingView.getScrollX();
        int maxX = Integer.MAX_VALUE; // or some appropriate max value in your code
        scroller.fling(initialX, 0, initialVelocity, 0, 0, maxX, 0, 10);
        Log.i(TAG, "starting fling at " + initialX + ", velocity is " + initialVelocity + "");

        lastX = initialX;
        getView().post(this);
    }

    public void run() {
        if (scroller.isFinished()) {
            Log.i(TAG, "scroller is finished, done with fling");
            return;
        }

        boolean more = scroller.computeScrollOffset();
        int x = scroller.getCurrX();
        int diff = lastX - x;
        if (diff != 0) {
            scrollingView.scrollBy(diff, 0);
            lastX = x;
        }

        if (more) {
            getView().post(this);
        }
    }

    boolean isFlinging() {
        return !scroller.isFinished();
    }

    void forceFinished() {
        if (!scroller.isFinished()) {
            scroller.forceFinished(true);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Scroller.startScroll的细节应该类似.

  • 在我提出这个问题差不多两年之后,我想你也可以创建一个子类,它接受一个委托,并定期调用该委托上的某些方法,即onScrollFinished()或onOverscroll()等.这将比轮询更好的IMO卷轴一直都是.@BillPhillips你真的帮了我这个.:) (2认同)