2016-12-19 64 views
0

我還沒有理解如何從下面的方法返回值,我試圖返回int,但它顯示出一個奇怪的錯誤,這是不可能解決的。這是代碼:從addOnPreDrawListener()獲取值

private void showTheEnemy() { 

    ViewTreeObserver vto = radarImage.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
     public boolean onPreDraw() { 
      radarImage.getViewTreeObserver().removeOnPreDrawListener(this); 
      yradar_height = radarImage.getMeasuredHeight(); 
      xradar_width = radarImage.getMeasuredWidth(); 
      return true; 
     } 
    }); 
    coordinateText.setText(yradar_height + " " + xradar_width); 
} 

我已經明白,值不被在方法,因爲當我使用setText()方法則int值爲0

回答

0

你得到零,因爲內部方法不更新在設置文本之前觸發。這些值設置爲您上次初始化它們時的值。

設置回調中的文字。

private TextView coordinateText; 
private int xradar_width = 0; 
private int yradar_height = 0; 

private void showTheEnemy() { 

    ViewTreeObserver vto = radarImage.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
     public boolean onPreDraw() { 

      yradar_height = radarImage.getMeasuredHeight(); 
      xradar_width = radarImage.getMeasuredWidth(); 

      coordinateText.setText(String.format("%d %d", 
       yradar_height, 
       xradar_width 
      )); 

      radarImage.getViewTreeObserver().removeOnPreDrawListener(this); 
      return true; 
     } 
    }); 

    // Your values are still 0 here 

} 

或者傳遞給另一個方法。

private TextView coordinateText; 

private void showTheEnemy() { 

    ViewTreeObserver vto = radarImage.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
     public boolean onPreDraw() { 

     setCoordinate(coordinateText, 
       radarImage.getMeasuredHeight(), 
       radarImage.getMeasuredWidth())); 
      radarImage.getViewTreeObserver().removeOnPreDrawListener(this); 
      return true; 
     } 
    }); 

} 

private static void setCoordinate(TextView tv, int xPos, int yPos) { 
    tv.setText(String.format("%d %d", xPos, yPos)); 
} 
+0

是的,我這樣做,我明白值更新方法,但我需要的是整數值可以從其他方法訪問。 – AndroidFreak

+0

您可以從其他方法訪問它們。直到回調之後。 –

0

設定值時,你得到radarImage寬度和高度:

private void showTheEnemy() { 
    ViewTreeObserver vto = radarImage.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
     public boolean onPreDraw() { 
      radarImage.getViewTreeObserver().removeOnPreDrawListener(this); 
      yradar_height = radarImage.getMeasuredHeight(); 
      xradar_width = radarImage.getMeasuredWidth(); 
      coordinateText.setText(yradar_height + " " + xradar_width); 
      return true; 
     } 
    }); 
    coordinateText.setText(yradar_height + " " + xradar_width); 
} 

編輯: 創建的類字段和時提供了新的值傳遞那些你需要他們的值。