在网上查了很多,LayoutTransition通过方法setAnimator设置一个ViewGroup的子View的消失出现方式。
当设置LayoutTransition.DISAPPEARING时,一般都要加上  PropertyValuesHolder pvhLeft =
                PropertyValuesHolder.ofInt("left", 0, 1);
        PropertyValuesHolder pvhTop =
                PropertyValuesHolder.ofInt("top", 0,,1);
        PropertyValuesHolder pvhRight =
                PropertyValuesHolder.ofInt("right", 0, 1);
        PropertyValuesHolder pvhBottom =
                PropertyValuesHolder.ofInt("bottom",0, 1);请问left,top这些值,为什么设置成1呢?难道一个像素?
而且,就算我把它们都只设置一个value,都是1、都是0或者1,0,随便分配也可以也能正常运行,为什么呢?
最后是效果图和代码:
 linearLayout=findViewById(R.id.linear);
        //添加button
        Button add=findViewById(R.id.add);
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Button button1=new Button(v.getContext());
                LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                button1.setLayoutParams(params);
                linearLayout.addView(button1);
            }
        });
        //删除button
        Button delete=findViewById(R.id.delete);
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                linearLayout.removeViewAt(linearLayout.getChildCount()-3);
            }
        });
        //被添加的View的动画
        LayoutTransition transition=new LayoutTransition();
        Animator translation=ObjectAnimator.ofFloat(null,"translationX", 200,0);
        transition.setAnimator(LayoutTransition.APPEARING,translation);
        //被移除的View的动画
        PropertyValuesHolder scaleX=PropertyValuesHolder.ofFloat("scaleX", 1f,0f);
        PropertyValuesHolder scaleY=PropertyValuesHolder.ofFloat("scaleY",1f,0f);
        ObjectAnimator animator= ObjectAnimator.ofPropertyValuesHolder(this,scaleX,scaleY);
        transition.setAnimator(LayoutTransition.DISAPPEARING,animator);
        PropertyValuesHolder pvhLeft =
                PropertyValuesHolder.ofInt("left", 0);
        PropertyValuesHolder pvhTop =
                PropertyValuesHolder.ofInt("top", 0);
        PropertyValuesHolder pvhRight =
                PropertyValuesHolder.ofInt("right", 0);
        PropertyValuesHolder pvhBottom =
                PropertyValuesHolder.ofInt("bottom", 0);
        PropertyValuesHolder pvhRotation =
                PropertyValuesHolder.ofFloat("scaleX", 1f,2f,1f);
        PropertyValuesHolder myProperty=PropertyValuesHolder.ofFloat("translationX",0,200);
        ObjectAnimator changeOut = ObjectAnimator.ofPropertyValuesHolder(
                this, pvhLeft, pvhTop, pvhRight, pvhBottom,pvhRotation,myProperty);
        
        transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,changeOut);
        linearLayout.setLayoutTransition(transition);