[英]Method works with literal value but not with variable holding the same value
下面的代码。
ObjectAnimator对象“ slideUpTranslate ”可以正常工作。 它将ImageView向上滑动。
slideDownTranslate,然而,这并不在所有除非文字值代替整数变量“menuHeight”的供给工作。 它不会引发任何类型的错误,当您按下向下滑动按钮时它什么也不做。
我尝试在onCreate调用中手动将menuHeight初始化为任意值。 我尝试将其指定为浮点数而不是整数。 我尝试为每个ObjectAnimator对象使用不同的变量。 我尝试使用与slideUpTranslate完全相同的参数实例化slideDownTranslate。 没有雪茄。 我真的没有看到slideDownTranslate无法正常工作的原因。
Button slideUpButton;
Button slideDownButton;
ImageView menuView;
int menuHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
slideUpButton = (Button)findViewById(R.id.slideUpButton);
slideDownButton = (Button)findViewById(R.id.slideDownButton);
menuView = (ImageView)findViewById(R.id.menuView);
menuView.setBackgroundResource(R.drawable.menucropped);
//This works
final ObjectAnimator slideUpTranslate =
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, menuHeight * -1);
slideUpTranslate.setInterpolator(new AccelerateDecelerateInterpolator());
//This does nothing
final ObjectAnimator slideDownTranslate =
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, menuHeight);
slideDownTranslate.setInterpolator(new AccelerateDecelerateInterpolator());
menuView.post(new Runnable() {
@Override
public void run() {
menuHeight = menuView.getHeight();
menuView.setTranslationY(menuHeight);
}
});
slideUpButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
slideUpTranslate.start();
Log.i("Test", "Slide up clicked... Height:" + Integer.toString(menuHeight));
}
});
slideDownButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
slideDownTranslate.start();
Log.i("Test", "Slide down clicked... Height:" + Integer.toString(menuHeight));
}
});
}
}
简而言之,这可行:
final ObjectAnimator slideDownTranslate =
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, 500);
但这不是:
final ObjectAnimator slideDownTranslate =
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, menuHeight);
为了进一步使事情复杂化, slideUpTranslate使用文字值或变量。 它们是完全一样的,但是一个在第三个参数槽中使用变量,而另一个则不行。
如果我不能很快解决这个问题,那就去坚果屋收尾吧! 救我!
您要在menuView的值首次用于创建动画后为其赋值。 除非我看不到menuItem的某些隐藏分配,否则您要将(menuHeight == 0)的值传递给两个动画师。 然后,当您稍后在onclick处理程序中记录menuHeight的值时,您会从稍后执行的Runnable中看到menuHeight的重新分配值。
您可能要考虑在启动动画的最后时刻分配动画,而不是在onCreate()中对其进行初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.