获取我的应用程序android中心点

时间:2011-02-23 15:38:46

标签: android

在我的应用程序中,Horizo​​ntalscrollview存在。它由LinearLayout组成,对于那个布局,我已经为它添加了多个按钮.ViewFlipper也存在于其中。当我翻转布局时,我想移动horizo​​ntalscrollview,相应的按钮应该到达中心位置。 我的布局和按钮数量相同。对于第一个布局,第一个按钮应该位于中心位置?

thnx寻求任何帮助......

2 个答案:

答案 0 :(得分:1)

嗯,好吧,只是要指出,当你到达第一个或最后一个位置(可能是第一个+ 1,最后一个 - 也是,根据按钮大小),你将无法进入中心,因为你不能只使用Horizo​​ntalScrollView过度滚动。考虑到这一点,对于你的一般情况(你可以处理你喜欢的边缘情况 - 我建议尽可能地滚动它,并给所选按钮某种突出显示)你应该能够做这样的事情:

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>