private class HSV extends HorizontalScrollView {
public LinearLayout L;
public AbsoluteLayout A;
public HSV(Context context) {
super(context);
L = new LinearLayout(context);
A = new AbsoluteLayout(context);
}
@Override public void addView(View child) {
A.addView(child);
}
void update_scroll() {
removeView(L);
addView(L, 0);
L.removeView(A);
L.addView(A);
A.invalidate();
L.invalidate();
invalidate();
requestLayout();
}
int GetCurrentPos() {
return getScrollX(); // <-- this line if HSV
return getScrollY(); // <-- this line if VSV
}
... few more methods skipped, they will not change at all in 'vertical' version
}
私はこのクラスを持っています。それは私が望むことを完全に行います。ここで、(vertical)ScrollView から派生し、まったく同じになる新しいクラス VSV が必要です。私は確かにブロック全体をコピーして、 extends HorizontalScrollViewをextends ScrollViewに変更し、次に(L, 0)を(0, L)に変更することができます (おっと、これは SO で公開するときの間違いでした。確かにその行は変更されず、GetCurrentPos は)。
または、「bool vertical」プロパティを追加できます。しかし、Java にはテンプレートやマクロ、ランタイム プロトタイピングがありません。Java でこの例のコードの重複を避ける方法は他にあるのでしょうか?