2012-01-05 2 views
8

Я пытаюсь получить значения из метода myImageView.getImageMatrix(), как только моя активность будет готова. Я пробовал использовать методы onCreate(), onStart(), onResume(), но матрица, которую я получаю, является значением по умолчанию.Android - есть ли какое-либо событие, когда action.setContentView закончил рендеринг?

Если я вызываю myImageView.getImageMatrix(), вызванный OnClickListener, после того как моя активность видна, я получаю правильные значения.


Просто чтобы быть более ясным:

  • вызова getImageMatrix OnStart = Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}

  • вызова getImageMatrix OnClick = Matrix{[0.77488154, 0.0, 7.6717987][0.0, 0.77488154, 0.0][0.0, 0.0, 1.0]}

+0

Проблема заключается в том, что расположение получает не измеряется и не вынесено до onResume() закончена. Проверьте этот вопрос, чтобы узнать, как вы можете получить уведомление, когда это произойдет: http://stackoverflow.com/questions/7750102/how-to-get-height-and-width-of-button – Flo

+0

Спасибо за это, вызывается onWindowFocusChanged после того, как данные имеются, однако он называется при каждом изменении фокуса. Я мог бы добавить флаг, который будет указывать на состояние init, но он не выглядит таким гладко. Я думаю, что это мое решение на данный момент, любые мысли? –

ответ

15

Вы также можете попробовать этот метод:

ImageView myImageView = (ImageView) findViewById(R.id.myImageView); 
ViewTreeObserver vto = myImageView.getViewTreeObserver();  
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {   
    @Override   
    public void onGlobalLayout() {    
     // do something now when the object is loaded 
     // e.g. find the real size of it etc   
     myImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);   
    }  
}); 
+0

Ваше решение выглядит лучше всего, спасибо :) –

+0

removeGlobalOnLayoutListener() теперь устарел, начиная с версии SDK 16 (Jelly Bean) removeOnGlobalLayoutListener() следует использовать. – flo

0

Может быть, вы можете использовать onLayoutChangeListener, но я Я не уверен.

+0

не уверен, в любом случае. Чтобы использовать этот класс, приложение должно указать уровень API «11» или выше. что, к сожалению, не мое дело. –

0

Возможно, вы можете использовать AsyncTask (http://developer.android.com/reference/android/os/AsyncTask.html), который контролирует, загружен ли ImageView (возможно, не равен нулю).

Вы можете отобразить диалоговое окно progess в onProgressUpdate, а затем продолжить свой код из onPostExecute.

+0

Спасибо, звучит немного сложно для того, что кажется тривиальной задачей. «уведомлять, когда вид готов» –

4

Я не 100%, но мне нужно было знать что-то подобное для моего развития, и я узнал, что при загрузке представления вызывается onWindowFocusChanged(). Я не уверен, что это наполнит ваши потребности или нет.

+0

Благодарим за это, onWindowFocusChanged вызывается, как только данные есть, однако он вызывается при каждом изменении фокуса. Я мог бы добавить флаг, который будет указывать на состояние init, но он не выглядит таким гладко. Я думаю, что это мое решение на данный момент, любые мысли? –

+0

О, да, извините, забыл добавить это. У меня есть глобальное логическое значение, которое я использую, чтобы убедиться, что это первый вызов фокуса, а затем выполните то, что мне нужно сделать. Я думаю, это зависит от того, что вам нужно сделать, но если вам просто нужно что-то получить при первом загрузке экрана, тогда глобальная переменная должна исправить это, если не самый элегантный код. – MikeIsrael

+0

Еще раз спасибо, я буду работать с этим;) –