gpt4 book ai didi

android - 使用动画更改布局的权重

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:07 33 4
gpt4 key购买 nike

在我的主布局文件中,我有一个权重为 1 的 RelativeLayout(主要是为了显示 map )在权重为 2 的 LinearLayout 之上,声明如下:

<LinearLayout
android:id="@+id/GlobalLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout
android:id="@+id/UpLayout"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1" >
</RelativeLayout>

<LinearLayout
android:id="@+id/DownLayout"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="2"
android:orientation="vertical" >
</LinearLayout>

</LinearLayout>

DownLayout 包含一个项目列表,当我点击一个项目时,我想将 DownLayout 的权重更改为 4,所以上层布局( map )只占屏幕的 1/5 而不是 1/3 .

我已经设法通过更改 LayoutParams 来做到这一点:

    LinearLayout linearLayout = (LinearLayout) mActivity.findViewById(R.id.DownLayout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 4.0f;
linearLayout.setLayoutParams(params);

它有效,但我不满意,变化太直接,没有过渡,而我希望它是平滑的。有没有办法为此使用动画?

我找到了一些使用 ObjectAnimator 来改变 weightSum 的例子,但它并不像我想要的那样(如果我只改变这个属性,我的向下布局下面有一些空闲空间):

        float ws = mLinearLayout.getWeightSum();
ObjectAnimator anim = ObjectAnimator.ofFloat(mLinearLayout, "weightSum", ws, 5.0f);
anim.setDuration(3000);
anim.addUpdateListener(this);
anim.start();

有没有办法使用 ObjectAnimator(或其他东西)来做到这一点?

谢谢!

最佳答案

我最近遇到了一个类似的问题并使用标准动画解决了它(我必须以 API 10 为目标,所以不能使用 ObjectAnimator)。我使用了答案的组合 here稍作改动以考虑体重而不是高度。

我的自定义动画类如下所示...

private class ExpandAnimation extends Animation {

private final float mStartWeight;
private final float mDeltaWeight;

public ExpandAnimation(float startWeight, float endWeight) {
mStartWeight = startWeight;
mDeltaWeight = endWeight - startWeight;
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContent.getLayoutParams();
lp.weight = (mStartWeight + (mDeltaWeight * interpolatedTime));
mContent.setLayoutParams(lp);
}

@Override
public boolean willChangeBounds() {
return true;
}
}

并且通过这个方法调用...

public void toggle() {
Animation a;
if (mExpanded) {
a = new ExpandAnimation(mExpandedWeight, mCollapsedWeight);
mListener.onCollapse(mContent);
} else {
a = new ExpandAnimation(mCollapsedWeight, mExpandedWeight);
mListener.onExpand(mContent);
}

a.setDuration(mAnimationDuration);
mContent.startAnimation(a);
mExpanded = !mExpanded;
}

希望这对您有所帮助,如果您需要更多详细信息或有任何疑问,请告诉我。

关于android - 使用动画更改布局的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18024591/

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