一、通过ViewGroup.LayoutParams()
以控件在RelativeLayout
中为例,其他布局中也是一样的,可以通过修改控件的magin
属性来改变控件的位置。
// 需要注意的是,此时构造参数中的两个属性为控件的宽和高(px),而不是父布局的宽和高。
RelativeLayout.LayoutParams layoutparams = new RelativeLayout.LayoutParams(100,100);
layoutparams.setMargin(left,top,right,bottom);//直接设置四个方向的magin
//layoutparams.addRule(RelativeLayout.CENTER_VERTICAL)//添加控件在布局中显示的规则。
layoutparams.setLeftMargin(left);
layoutparams.setTopMargin(top);
layoutparams.setRightMargin(right);
layoutparams.setBottomMargin(bottom);
mButton.setLayoutParams(layoutparams);//mButton为你想要修改的控件
二、通过属性动画
移动 translationX
、translationY
float translationX
:表示在X
轴上的平移距离,以当前控件为原点,向右为正方向,参数translationX
表示移动的距离。float translationY
:表示在 Y 轴上的平移距离,以当前控件为原点,向下为正方向,参数translationY
表示移动的距离。
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "translationX", 0, 200, -200,0);
animator.setDuration(2000);
animator.start();
指定的移动距离是(0, 200, -200,0),所以控件会从自身所有位置向右移动 200 像素,然后再移动到距离原点-200 的位置,最后回到原点
//参数一:要操纵的view;
//参数二:要操纵的属性(translationX、translationY、rotationX、rotationY、rotation、scaleX、scaleY, alpha)
//参数三:可变数组参数,代表属性变化的一个取值过程。
ObjectAnimator translationX = ObjectAnimator.ofFloat(mTestView, “translationX”, 300);