以下代码。
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 可以使用文字值或变量。它们完全相同,但在第三个参数槽中使用变量,而第一个参数槽中没有。
如果我不能很快解决这个问题,那就去坚果屋吧!救救我!
答案 0 :(得分:1)
在首次用于创建动画之后,您将分配menuView 的值。除非我无法看到menuItem的隐藏分配,否则您将(menuHeight == 0)的值传递给两个动画师。然后,当您稍后在onclick处理程序中记录menuHeight的值时,您将看到稍后执行的Runnable中menuHeight的重新分配值。
您可能需要考虑在动画师开始之前的最后一刻分配动画师,而不是在onCreate()中初始化动画师。