2016-10-22 3 views
0

メインスレッドがアイドルループに戻るまでview.setTranslationY(-10.0f)を呼び出した直後にビューが直ちに更新されないことが分かります。setTranslationYを呼び出した後に実際に更新されるUIのタイミングを取得するにはどうすればよいですか?

ビューが更新された直後にスクリーンショットを撮りたいが、私はそれを行う機会を与えるために "onTranslationFinished()"や "setOnTranslationEnd()"のようなコールバックを見つけられない。まず

は、私は次のコードのように行なったし、それが実際に働いた:

view.setTranslationY(-10.0f); 
view.post(new Runnerable() { 
@Override 
void run() { 
    takeScreenshot(); 
}); 

しかし、私の携帯電話は、メモリの制限に達していると、それはゆっくりと走っているとき、 方法は、私の期待通りに動作しません。 takeScreenshot()は実際に変換されたビューの前に実行されます-10.0f。 私はpostDelayed(100ms)が一時的に問題を解決するかもしれないと知っていますが、それは最善の解決策ではありません。

私の要件を満たす方法はありますか?

答えて

0

ビューツリーオブザーバのonDrawListenerを追加できます。次のコードのように:

view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() { 
      @Override 
      public void onDraw() { 
       //action 
      } 
     });` 

このコールバックは、ビューツリーが描画されようとしているときに呼び出されます。

+0

コメントありがとうございますが動作しません。 – Keith

+0

私はonDrawにブレークポイントを設定し、それにログを出力しようとしました。残念ながら、onDrawはまったく呼び出されません。翻訳は再描画を引き起こさないかもしれません。 – Keith

+0

実際に呼び出されます。 app.gradleファイルを確認するには、 'minSdkVersion'が少なくとも' 16'である必要があります。それ以外の場合は、コールバックされません。 @Keith –

関連する問題