2016-02-19 48 views
0

下面的代碼。方法適用於文字值,但不適用於保持相同值的變量

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作品與任何一個文本值一個變量。它們完全一樣,但是在第三個參數槽中有一個變量,而另一個沒有。

如果我不能很快弄清楚這個事情,我們就會在堅果屋裏捲起來!救我!

+0

你需要比「不工作」更具體。它表現出意外嗎?它會拋出一個編譯器錯誤嗎?運行時錯誤?錯誤說的是什麼? – shmosel

+0

它什麼都不做。根本沒有錯誤。設置在按鈕監聽器中的日誌顯示menuHeight的正確值。 slideUpTranslate將圖像向上滑動,但除非將第三個參數設置爲文字值,否則slideDownTranslate不會執行任何操作。 – Brett

回答

1

您將在之後指定menuView 的值,它首先用於創建動畫。除非有一些menuItem的隱藏賦值我看不到,您將(menuHeight == 0)的值傳遞給兩個動畫師。然後,當您稍後在onclick處理程序中記錄menuHeight的值時,您會看到稍後執行的Runnable中menuHeight的重新分配值。

您可能需要考慮在開始之前的最後時刻分配動畫師,而不是在onCreate()中初始化它們。

+0

你說得對。我太在意按鈕聽衆的日誌說了什麼。到那時menuHeight被分配了正確的值,但動畫師在onCreate中接收了零。它恰巧發生了「0」動畫到向上翻譯的正確位置。這意味着我需要重新考慮其他一些事情。謝謝一堆! – Brett

相關問題