2016-10-27 2 views
1

Я разрабатываю приложение, в котором я хочу изменить текстовое представление после загрузки нескольких кадров, как и в первом текстовом представлении, будет по умолчанию, после того, как 4 кадра загрузит текстовое представление, должно измениться затем снова после 9 кадров загружать текстовый вид должен измениться. Как я могу это сделать?можно получить текущий номер кадра в андроидной анимации

ответ

1

Вы можете сделать это, переопределив selectDrawable(int idx) метод AnimationDrawable класс. Для этого Вам нужно создать пользовательский класс, который расширяет AnimationDrawable объявляет интерфейс OnFrameChangeListener и поднимает onFrameChanged() метод, когда кадр изменен следующим образом:

общественного класса ExtendedAnimationDrawable расширяет AnimationDrawable {

public interface OnFrameChangeListener { 
    void onFrameChanged(int numOfFrame); 
} 

private OnFrameChangeListener mFrameChangeListener; 

public ExtendedAnimationDrawable(AnimationDrawable aniDrawable) { 
    for (int i = 0; i < aniDrawable.getNumberOfFrames(); i++) { 
     this.addFrame(aniDrawable.getFrame(i), aniDrawable.getDuration(i)); 
    } 
} 

public void setFrameChangeListener(OnFrameChangeListener frameChangeListener) { 
    this.mFrameChangeListener = frameChangeListener; 
} 

@Override 
public boolean selectDrawable(int idx) { 
    boolean result = super.selectDrawable(idx); 

    if (mFrameChangeListener != null) { 
     mFrameChangeListener.onFrameChanged(idx); 
    } 

    return result; 
} 

}

Чем Вы можете использовать это примерно так:

View v ; 

... 

v.setBackgroundResource(R.drawable.animation_list); 
ExtendedAnimationDrawable extendedAnimation = new ExtendedAnimationDrawable(
     (AnimationDrawable) ContextCompat.getDrawable(context, R.drawable.animation_list)); 
extendedAnimation.setFrameChangeListener(new ExtendedAnimationDrawable.OnFrameChangeListener() { 
    @Override 
    public void onFrameChanged(int numOfFrame) { 
     // do your magic here 
     // for example 
     if (numOfFrame == 4) { 
      // change TextView #1 
     } 
     if (numOfFrame == 4 + 9) { 
      // change TextView #2 
     } 
    } 
}); 

int sdk = android.os.Build.VERSION.SDK_INT; 
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
    v.setBackgroundDrawable(extendedAnimation); 
} else { 
    v.setBackground(extendedAnimation); 
} 

extendedAnimation.start(); 
+0

его работающий awesome thanks –

Смежные вопросы