Soham上面的答案適用於我,儘管值得指出的是(因爲在第一次閱讀本主題時對我來說並不明顯),您仍然可以通過以下方式獲得與動畫偵聽器幾乎相同的行爲:在視圖上設置單獨的偵聽到年底運行您查看的onAnimationStart()
和onAnimationEnd()
。
舉例來說,如果你的代碼需要禁用動畫的持續時間按鈕:
Animation a = getAnimation(/* your code */);
a.setDuration(1000);
a.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
myButton.setEnabled(false);
}
@Override
public void onAnimationEnd(Animation arg0) {
myButton.setEnabled(true);
}
});
someView.startAnimation(a);
目前,不知道myButton
,我想保持這種方式。你可以只在被調用以相同的方式自定義視圖類創建一些聽衆:
public final class SomeView extends View {
// other code
public interface RealAnimationListener {
public void onAnimationStart();
public void onAnimationEnd();
}
private RealAnimationListener mRealAnimationListener;
public void setRealAnimationListener(final RealAnimationListener listener) {
mRealAnimationListener = listener;
}
@Override
protected void onAnimationStart() {
super.onAnimationStart();
if (mRealAnimationListener != null) {
mRealAnimationListener.onAnimationStart();
}
}
@Override
protected void onAnimationEnd() {
super.onAnimationEnd();
if (mRealAnimationListener != null) {
mRealAnimationListener.onAnimationEnd();
}
}
}
然後回到你的其他代碼(可能是一個活動):
Animation a = getAnimation(/* your code */);
a.setDuration(1000);
someView.setRealAnimationListener(new RealAnimationListener() {
@Override
public void onAnimationStart() {
myButton.setEnabled(false);
}
@Override
public void onAnimationEnd() {
myButton.setEnabled(true);
}
});
someView.startAnimation(a);
這使得你可以你的組件乾淨地分離,同時仍然得到一個工作的AnimationListener。
這對我很有幫助,非常感謝。 – 2011-04-21 19:52:55
我很高興Nick。 – Soham 2012-08-14 10:58:48
謝謝,這個作品如上所述,浪費時間才找到你的帖子! – radhoo 2012-09-09 11:36:12