代码之家  ›  专栏  ›  技术社区  ›  Nic Parmee

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

  •  0
  • Nic Parmee  · 技术社区  · 7 年前

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

    <?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);
        }
    }
    

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Shahin    7 年前

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

    android:layout_height="200dp"
    

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

    请尝试使用“wrap\u content”作为LinearLayout高度

    最好是计算每个高度。

    当您展开视图时,它会扩展到其他视图的任何高度+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