2013-03-18 3 views
2

У меня есть ScrollView, который содержит многочисленные виды на LinearLayout. Я внедрил и collapse раскладки. OnClick зрения, это либо расширить или collapse.So, когда вид расширяется, я хочу программно перемещать ScrollView таким образом, что точка зрения приходит на верхней части изображения screen.See нижеAndroid, как перемещать scrollview ребенка вверх программно

enter image description here

Я хочу, чтобы переместить ScrollView до длины, указанной на красной линии. В child от ScrollView содержится TextView (4: Уведомление о состоянии) и ImageView. Дополнительно ScrollView может содержать или не содержать изображения, расположенные выше или ниже комбинации TextView ImageView. Я использовал CustomScrollView где я Findout scroll Y по

public int newY=0; 
@Override 
protected void onScrollChanged(int X, int Y, int oldX, int oldY) { 
    super.onScrollChanged(X, Y, oldX, oldY); 
    this.newY=Y; 
} 

Для этого я использовал следуя логике

public void translateView(View view){ 
    int[] xy =new int[2]; 
    //view = ImageView 
    view.getLocationOnScreen(xy); 
    int scrollY = xy[1]+view.getBottom(); 
    //screenHeight =ScreenHeight of the phone 
    if(scrollY>screenHeight){ 
     //heading textView 
     textView.getLocationOnScreen(xy); 
     int diff = screenHeight-xy[1]; 
     diff =Math.abs(diff); 
     int moveHeight = (int) (scrollView.newY+diff); 
     scrollView.smoothScrollTo(0, moveHeight); 

    } 
} 

Поэтому в основном то, что я пытаюсь сделать, это найти разницу между y положением TextView и вычитании он с высотой экрана и прокруткой ScrollView до такой разницы, так что вид отображается сверху. Но он не работает. Любая идея о том, как этого достичь.

ответ

0

Я только что нашел то, что я делал неправильно. Каждый экран состоит из StatusBar и в моем случае ActionBar. Поэтому, когда я вычислял позицию View Y, я вычислял ее с верхней части экрана, и всякий раз, когда я использую значение приращения для ScrollView Scroll, я перемещал свой взгляд в верхней части экрана. фактическое решение будет

public void translateView(final View view){ 
    int[] xy =new int[2]; 
    view.getLocationOnScreen(xy); 
    int scrollY = xy[1]+view.getBottom(); 


    if(scrollY>DataHolder.screenHeight){ 
     handle.getLocationOnScreen(xy); 
     int actualY=xy[1]-DataHolder.actionbarHeight-DataHolder.statusBarHeight; 
     int moveHeight = (int) (scrollView.newY+actualY); 
     scrollView.smoothScrollTo(0, moveHeight); 
    } 
} 

Так делая это мой взгляд автоматически достигает верхней части экрана

Смежные вопросы