如何在执行操作时移动布局或卡片视图



我通过更改可扩展卡片视图的可见性,在 android 工作室中创建了可展开和可折叠的卡片视图。(因此,如果它可见,则表示已展开,如果不可见,则表示折叠,则每个卡片视图都具有是展开还是折叠的状态。但是,当卡片视图展开时,它就会位于下一个卡片视图的下方。有什么可能的方法可以将折叠的卡片视图从展开的卡片视图中推开?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout    
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp" --> the extra 100dp for the expanded view
android:orientation="vertical"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_marginBottom="-100dp"> --> this allows the card views to be underneath each other when not expanded
....
</LinearLayout>

我在卡视图适配器中的代码...

private void onClickButton(final CardView expandableLayout, final       
LinearLayout mainlayout, final int i){
    if (expandableLayout.getVisibility() == View.VISIBLE){
        expandableLayout.setVisibility(View.GONE);
        expandState.put(i,false);
    }
    else{
        expandableLayout.setVisibility(View.VISIBLE);
        // ideally mainlayout. 
        // something to change the   android:layout_marginBottom="0" ?
        expandState.put(i,true);
    }
}

我想我需要实现一些代码来更改主布局参数,当它可见时,当它不可见时,我只是找不到要使用的代码。

这是因为您已将线性布局设置为

android:layout_height="200dp"

线性布局不能扩展到 200dp 以上

尝试"wrap_content"表示线性布局高度

更好的是计算每个高度。

展开视图时,它会扩展到其他视图具有的任何高度 + CardView 的额外高度

使用 ValueAnimator 对高度进行动画处理,如下所示:

ValueAnimator anim = ValueAnimator.ofInt(YOUR_LINEAR_LAYOUT.getHeight(), getResources().getDimensionPixelSize(R.dimen.YOUR_DESIRED_HEIGHT));
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  @Override
  public void onAnimationUpdate(ValueAnimator valueAnimator) {
    int Val = (Integer) valueAnimator.getAnimatedValue();
    ViewGroup.LayoutParams param = YOUR_LINEAR_LAYOUT.getLayoutParams();
    param.height = Val;
    YOUR_LINEAR_LAYOUT.setLayoutParams(param);
  }
});
anim.setInterpolator(YOUR_DESIRED_INTERPOLATOR);
anim.setDuration(DURATION).start();

您甚至可以在AnimatorSet内使用多个值动画器

最新更新