下面的代碼。方法適用於文字值,但不適用於保持相同值的變量
ObjectAnimator對象「slideUpTranslate」工作得很好。它向上滑動ImageView。
然而,slideDownTranslate根本不工作,除非提供一個文字值來代替整數變量「menuHeight」。它不會拋出任何類型的錯誤,當你按下滑動按鈕時它什麼也不做。
我試過手動初始化menuHeight到onCreate調用中的任意值。我試過把它指定爲一個float而不是一個整數。我試過對每個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作品與任何一個文本值或一個變量。它們完全一樣,但是在第三個參數槽中有一個變量,而另一個沒有。
如果我不能很快弄清楚這個事情,我們就會在堅果屋裏捲起來!救我!
你需要比「不工作」更具體。它表現出意外嗎?它會拋出一個編譯器錯誤嗎?運行時錯誤?錯誤說的是什麼? – shmosel
它什麼都不做。根本沒有錯誤。設置在按鈕監聽器中的日誌顯示menuHeight的正確值。 slideUpTranslate將圖像向上滑動,但除非將第三個參數設置爲文字值,否則slideDownTranslate不會執行任何操作。 – Brett