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