Если вы не знаете Xamarin, но позвольте мне объяснить вероятное решение в нативном Android.
Если мы поместим ваш код в метод onCreate
следующим образом, мы не получим никакой прокрутки:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CardView dailyHabits = findViewById(R.id.cardViewDH);
final int y = dailyHabits.getTop();
final ScrollView scrollView = findViewById(R.id.scroll_view);
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.smoothScrollTo(0, y);
}
});
}
Проблема в том, что мы получаем верхнее значение карты, прежде чем оно нарисовано, что приводит к 0. Вы можете добавить наблюдателя дерева в макет или обновить код следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ScrollView scrollView = findViewById(R.id.scroll_view);
final CardView dailyHabits = findViewById(R.id.cardViewDH);
dailyHabits.post(new Runnable() { // could be scrollView
@Override
public void run() {
int y = dailyHabits.getTop();
scrollView.smoothScrollTo(0, y);
}
});
}
Теперь при запуске приложения вы должны получить желаемую прокрутку до верхней части нужного изображения карты.
Что касается вашего кода, он может быть превращен в это, чтобы получить тот же эффект:
CardView dailyHabits = FindViewById<CardView>(Resource.Id.cardViewDH);
ScrollView scrollView = FindViewById<ScrollView>(Resource.Id.scroll_view);
scrollView.Post(() => scrollView.SmoothScrollTo(0, dailyHabits.Top));