2

我有一个ScrollView包含许多关于LinearLayout.I 的视图的视图。我已经实现expandcollapse布局。OnClick视图,它要么展开要么折叠。所以当视图展开时,我想以编程方式移动ScrollView,使视图出现在屏幕顶部。见下图

在此处输入图像描述

我想将 移动ScrollView到红线所示的长度。childofScrollView包含一个TextView(4:状态栏通知)和一个ImageView.FurtherScrollView可能包含也可能不包含组合上方或下方的视图TextView ImageView。我使用了一个 CustomScrollView 我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到这些差异,以便视图显示在顶部。但它不起作用。关于如何实现这一点的任何想法.

4

1 回答 1

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

因此,通过这样做,我的视图会自动到达屏幕顶部

于 2013-03-18T11:39:44.710 回答