Android如何以编程方式将scrollview子项移动到顶部

Android如何以编程方式将scrollview子项移动到顶部,android,Android,我有一个滚动视图,其中包含许多关于线性布局的视图。我实现了展开和折叠布局单击视图的,它会展开或折叠。因此,当视图展开时,我希望通过编程方式移动滚动视图,使视图位于屏幕顶部。请参见下图 我想将滚动视图移动到红线所示的长度。ScrollView的子视图包含TextView(4:状态栏通知)和ImageView。此外ScrollView可能包含也可能不包含TextView-ImageView组合上方或下方的视图。我使用了一个CustomScrollView,其中我通过 public int newY

我有一个
滚动视图
,其中包含许多关于
线性布局
的视图。我实现了
展开
折叠
布局<代码>单击视图的,它会展开或折叠。因此,当视图展开时,我希望通过编程方式移动
滚动视图
,使视图位于屏幕顶部。请参见下图

我想将
滚动视图
移动到红线所示的长度。
ScrollView
子视图包含
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;
}
为此,我使用了以下逻辑

 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
,以获得这些差异,因此,视图显示在顶部。但它不起作用。有没有关于如何实现这一点的想法。

我刚刚发现我做错了什么。每个屏幕都由
状态栏
和我的
操作栏
组成。因此,当我计算
视图Y
位置时,我是从屏幕顶部开始计算的,每当我使用
滚动视图
的增量值时,我都会将视图移动到屏幕顶部。因此,实际的解决方案是

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);   
    }
}
因此,通过这样做,我的视图自动到达屏幕顶部