在网上查了很多,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);
当设置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);
LayoutTransition.CHANGE_DISAPPEARING
而且就算是删掉那个transition也是一样的