我想将一个视图(在我的情况下 - 一个按钮,但它并不重要)移动到屏幕的中心。 当我在没有动画的情况下进行移动时,它可以工作。 但是,我很难决定我应该使用哪些动画,因为TranslateAnimation只允许我这样做,但指定了我没有的精确x,y坐标(尝试使用指标,但计算不起作用,我不想使用这种方法)。
因此,此代码无需动画即可运行:
RelativeLayout.LayoutParams parms2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
parms2.addRule(RelativeLayout.CENTER_VERTICAL);
parms2.addRule(RelativeLayout.CENTER_HORIZONTAL);
_buttonC.setLayoutParams(parms2);
当我尝试添加动画时,它没有。
ObjectAnimator ani = ObjectAnimator.ofFloat(_buttonC, "Y", 2000);
ani.setDuration(4000);
ani.addListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationStart(Animator animation) {
RelativeLayout.LayoutParams parms2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
parms2.addRule(RelativeLayout.CENTER_VERTICAL);
parms2.addRule(RelativeLayout.CENTER_HORIZONTAL);
_buttonC.setLayoutParams(parms2);
}
@Override
public void onAnimationEnd(Animator animation)
{
}
});
任何帮助将不胜感激:)
答案 0 :(得分:14)
你试过了吗?
_buttonC.animate().translationX(parentCenterX - _buttonC.getWidth()/2).translationY(parentCenterY - _buttonC.getHeight()/2);
当然,您必须计算父centerX和centerY:
float parentCenterX = parent.getX() + parent.getWidth()/2;
float parentCenterY = parent.getY() + parent.getHeight()/2;
希望这会有所帮助。
答案 1 :(得分:0)
我不知道这是不是问题,但请尝试:
ObjectAnimator ani = ObjectAnimator.ofFloat(_buttonC, "translationY", 2000);
...
ani.start();
答案 2 :(得分:0)
首先。您需要获取屏幕坐标(类 Point)。从 onCreate 启动此方法。
fun getWindowSize():Point{
val display = windowManager.defaultDisplay
val size = Point()
display.getSize(size)
val width: Int = size.x
val height: Int = size.y
return size
}
第二。您需要:
计算中心在哪里
计算要移动的视图的大小并将其除以 2
从中心减去移动视图大小的一半
使用 ViewPropertyAnimator 移动视图
protected fun toCentre(view: View){
//get centre
val windowXcentre = size.x / 2
val windowYcentre = size.y / 2
//half size of moving view
val viewWidth = view.width /2
val viewHeight = view.height/2
//wher to move
val x = windowXcentre - viewWidth.toFloat()
val y = windowYcentre - viewHeight.toFloat()
//move it
view.animate().x(x).y((y))
}
答案 3 :(得分:-1)
private void moveSearchViewDown(){ 查看edit_text = findViewById(R.id.edit_text);
DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int mid = metrics.heightPixels/2 - edit_text.getHeight();
ObjectAnimator positionAnimation = ObjectAnimator.ofFloat(edit_text, View.Y, mid);
positionAnimation.start();
}