Ошибка указывает на нулевой указатель в конструкторе в ObservableScrollView. Не могли бы вы опубликовать конструктор, а также строку 12 самостоятельно?
Одна возможная проблема, с которой я сталкиваюсь при взаимодействии вашего XML и пользовательского представления прокрутки, заключается в том, что ваше пользовательское представление прокрутки является внутренним классом. См. на этой странице , чтобы узнать, как объявить собственный компонент внутреннего класса в XML или переместить его во внешний класс. Я обычно помещаю его во внешний класс, но если вы хотите сохранить его как внутренний класс, это будет что-то вроде
<view
class="com.glen.apps.TeacherAidePro$ObservableScrollView"
.../>
Я не думаю, что это объясняет ваше исключение нулевого указателя, поэтому, пожалуйста, опубликуйте свой класс ObservableScrollView.
EDIT:
Если вы настаиваете на том, чтобы делать все на Java, вот рабочий пример:
private ObservableScrollView scrollView1 = null;
private ObservableScrollView scrollView2 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout parent = new LinearLayout(this);
parent.setOrientation(LinearLayout.HORIZONTAL);
parent.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
parent.setWeightSum(2.0f);
scrollView1 = new ObservableScrollView(this);
scrollView1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT, 1.0f));
scrollView2 = new ObservableScrollView(this);
scrollView2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT, 1.0f));
scrollView1.setScrollViewListener(new ScrollViewListener() {
public void onScrollChanged(ObservableScrollView scrollView, int x,
int y, int oldx, int oldy) {
scrollView2.scrollTo(x, y);
}
});
scrollView2.setScrollViewListener(new ScrollViewListener() {
public void onScrollChanged(ObservableScrollView scrollView, int x,
int y, int oldx, int oldy) {
scrollView1.scrollTo(x, y);
}
});
TextView tv1 = new TextView(this);
tv1.setText("TEXT1TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT");
tv1.setTextSize(36.0f);
scrollView1.addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText("TEXT2TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT");
tv2.setTextSize(36.0f);
scrollView2.addView(tv2);
parent.addView(scrollView1);
parent.addView(scrollView2);
parent.invalidate();
setContentView(parent);
}
По сути, это создает два вида прокрутки рядом друг с другом, с весом 1,0, и помещает их в LinearLayout с общим весом на макете 2,0, так что каждый из них получает половину ширины.
Тем не менее, я настоятельно рекомендую привыкнуть к XML, так как на мой взгляд намного проще (на мой взгляд) создавать макеты. Также легче обнаружить ошибки, а вложенная форма XML облегчает чтение. В любом случае, надеюсь, это прояснит ситуацию.