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
}
我有这门课,它完美地满足了我的需求。现在我需要新的 VSV 类,它将派生自(垂直)ScrollView 并且是一样的。我当然可以复制整个块并将 extends HorizontalScrollView 更改为extends ScrollView,然后将(L, 0)更改为(0, L)(哎呀,这是在 SO 上发布时出现的错误,肯定那行不会改变,GetCurrentPos 会)。
或者我可以添加“布尔垂直”属性。但是 Java 没有模板或宏,也没有运行时原型,那么 Java 中是否有其他方法可以避免此示例中的代码重复?