私は、インターフェイス内の1つのメソッドだけが大半の時間を使用するアニメーションリスナーを自分のコードに持っています。Javaで非機能インターフェイスでのラムダ式の使用
だから私はこのラッパーを作成しました:
public class AnimationWrapper {
private Animation mAnimation;
public AnimationWrapper(Animation animation) {
mAnimation = animation;
}
public Animation getAnimation() {
return mAnimation;
}
public interface OnAnimationEnd {
void onAnimationEnd(Animation animation);
}
public interface OnAnimationStart {
void onAnimationStart(Animation animation);
}
public void setAnimationEndListener(OnAnimationEnd listener) {
mAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
listener.onAnimationEnd(animation);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
public void setAnimationStartListener(OnAnimationStart listener) {
mAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
listener.onAnimationStart(animation);
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
}
このようなその方法コード:
Animation animation = AnimationUtils.loadAnimation(context, R.anim.my_animation);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
doSomething();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
はこのように見て終了します。
AnimationWrapper wrapper = new AnimationWrapper(AnimationUtils.loadAnimation(context, R.anim.my_animation));
wrapper.setAnimationEndListener(a -> doSomething());
があるかどうか私は思ったんだけど1つの方法で非機能的なインターフェースを別々のインターフェースに分割し、それぞれの方法を使用できるようにするより良い方法ラムダ式とは別にただ
public interface OnAnimationEnd {
void onAnimationEnd(Animation animation);
}
public interface OnAnimationStart {
void onAnimationStart(Animation animation);
}
public class AnimationListeners {
public static Animation.AnimationListener adapt(OnAnimationStart oas) {
return new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
oas.onAnimationStart(animation);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
// same for the end
}
そして、あなたでしょう:
空のメソッドを実装する抽象的なAnimationAdapterクラスはありますか? –