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的细节应该类似.
归档时间: |
|
查看次数: |
21759 次 |
最近记录: |