在我的应用程序中,Horizontalscrollview存在。它由LinearLayout组成,对于那个布局,我已经为它添加了多个按钮.ViewFlipper也存在于其中。当我翻转布局时,我想移动horizontalscrollview,相应的按钮应该到达中心位置。 我的布局和按钮数量相同。对于第一个布局,第一个按钮应该位于中心位置?
thnx寻求任何帮助......
答案 0 :(得分:1)
嗯,好吧,只是要指出,当你到达第一个或最后一个位置(可能是第一个+ 1,最后一个 - 也是,根据按钮大小),你将无法进入中心,因为你不能只使用HorizontalScrollView过度滚动。考虑到这一点,对于你的一般情况(你可以处理你喜欢的边缘情况 - 我建议尽可能地滚动它,并给所选按钮某种突出显示)你应该能够做这样的事情:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenWidth = metrics.widthPixels;
//get an instance of your LinearLayout, HSV, and ViewFlipper
LinearLayout ll = (LinearLayout)findViewById(R.id.my_linear_layout);
ViewFlipper vf = (ViewFlipper)findViewById(R.id.my_view_flipper);
HorizontalScrollView hsv = (HorizontalScrollView)findViewById(R.id.my_hsv);
//as you've said, there should always be an equal number of Buttons as
//Views in the ViewFlipper. This code assumes that is always true.
View v = ll.getChildAt(vf.getDisplayedChild());
//assuming smoothScrollTo scrolls to the left side of the screen,
//which I think it does, we want to scroll to the Button's center
//point, minus (shifted to the right) by half the screen width
int scrollTo = v.getLeft() + (v.getWidth() - screenWidth) / 2);
//handle overflow for the edge cases
if (scrollTo < 0) scrollTo = 0;
else if (scrollTo > hsv.getWidth()) scrollTo = hsv.getWidth();
hsv.smoothScrollTo(scrollTo);
未经测试,我很容易出现小的语法错误,但一般的想法可能会有所帮助。 :)
答案 1 :(得分:0)
获取显示的大小,除以2,然后减去按钮宽度除以2?
但听起来你应该在自己的视图中使用按钮,然后将视图合并在一起。
<merge>
<HorizontalScrollView .../>
<Button ... />
</merge>