2013-03-18 57 views
2

我有一个ScrollView,其中包含LinearLayout的众多视图。我已经实现expandcollapse布局。来看OnClick,其扩张或collapse.So当一个视图扩展,我想以编程方式移动ScrollView这样的观点来对screen.See图像的顶部下方Android如何将scrollview子页面移动到页首

enter image description here

我想移动ScrollView至红线所示的长度。 ScrollViewchild包含TextView(4:状态栏通知)和ImageView。进一步的ScrollView可以包含或不包含高于或低于TextView ImageView组合的视图。我已经使用了CustomScrollView,我通过

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; 
} 

对于findout scroll 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); 

    } 
} 

所以基本上我所要做的是找到TextView和减法y位置之间的差异它与屏幕高度和滚动的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); 
    } 
} 

因此,通过这样做,我认为自动到达屏幕的顶部