gpt4 book ai didi

android - 相对布局 : align view to child of sibling viewgroup

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:40:27 24 4
gpt4 key购买 nike

我正在尝试使用 RelativeLayout 和 RadioGroup 在 android 中创建一个标签栏,该 RadioGroup 具有一个指示器,该指示器将滑动以指示 RadioGroup 中的 Activity RadioButton。

这些是自定义的单选按钮,实际上是文本上带有图标的矩形,所有内容都居中,背景使用自定义状态选择器。

这是我当前的层次结构:

<RelativeLayout>       // Main view of the tab bar
<RadioGroup> // The buttons
<RadioButton />
<RadioButton />
<RadioButton />
</RadioGroup>
<ImageView /> // The indicator
</RelativeLayout>

我的想法是,当单击单选按钮时,我会将指示器与所选单选按钮的顶部和底部对齐(并为其设置动画)。但是,似乎 layout_align<Edge>仅适用于兄弟元素,不适用于另一个 View 组的成员,即我可以与 RadioGroup 本身对齐,但不能与其中的 RadioButton 对齐。

我想把指示器作为 RadioGroup 的成员,但由于 RadioGroup 是 LinearLayout 的扩展,似乎没有办法将它放在给定 RadioButton 的边缘。

谁能想到我如何解决这个问题?或者也许有比我的动画对齐按钮技术更好的解决方案?

更新在@superjos 的帮助下,我设法很好地解决了这个问题。

我必须给每个按钮一个已知的高度,而不是使用 wrap_content (不理想,但对于这个项目,它应该可以正常工作)。使指示器的高度与按钮的高度相匹配。确保 RadioGroup 设置为包装内容并在父 View 中垂直居中。将指标设置为 alignToptoRightOf广播组。然后,对于按钮点击监听器:

int prevY, newY;
int prevButtonIndex, newButtonIndex;

public void moveIndicator(button, indicator, index) {
prevY = newY;
newY = prevY + (index - prevButtonIndex) * button.getHeight();
TranslateAnimation animation = new TranslateAnimation(0, 0, prevY, newY);
animation.setDuration(500);
animation.setFillAfter(true); // stay at final animation position
indicator.setAnimation();
animation.start();
}

最佳答案

这是我的想法。以下是一些更详细的步骤。

想法是让 ImageView 有一个 RadioGroup 兄弟,就像在您的示例中一样。 ImageView 最初位于 RadioGroup 的右侧,其水平中间线与第一个(或任何选定的)RadioButton 对齐。

然后,在单击 RadioButton 时,会在运行时构建/配置 TranslateAnimation,以便让 ImageView 垂直移动,直到它的中间线与单击的按钮之一对齐。动画是用 fillAfter 设置的,以便在完成后保持稳定。

步骤:

  • 创建您的资源,使 ImageView 和 RadioButton 具有相同的高度,或者使用垂直填充使它们具有相同的高度。

  • 要最初将 ImageView 与第一个 RadioButton 对齐,一些 XML 可能 就足够了:在 ImageView 中将 layout_toRightOflayout_alignTop 附加到 radio 组。为了考虑 RadioGroup 的顶部填充,您可以将其添加到初始 ImageView 顶部填充 XML 属性。或者最好是上边距。

  • 单击 RadioButton 时,创建将应用于 ImageVew 的 TranslateAnimation,仅更改从 0 开始到其目标 toY 值的 Y 坐标(而 from/toX 属性将为 0)。这是由一个公式给出的,例如:

    toY = (ClickedRadioButton.Index - LastClickedRadioButton.Index) * RadioButton.Heigth

    这里的 Index 是 RadioButton 在组内的顺序位置(例如从 0 到 2)(警告:这是伪代码,不一定是名为 Index< 的现有 Java 字段/em>).

  • 将动画应用于 ImageView 并启动它。

关于android - 相对布局 : align view to child of sibling viewgroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com