0

たぶんこれは簡単な質問です...私は現在、主なアクティビティ(A)がDoodleViewという名前のビューを拡張する描画アプリに取り組んでいます。

DoodleViewの寸法を簡単に測定するonSizeChanged(int w, int h, int oldW, int oldH)方法を知っていますが、AのDoodleViewの寸法を測定する方法を知りたいです。他の同様の質問のいくつかを調査しましたが、それらのほとんどは内部の寸法を取得する方法を尋ねているようです。拡張ビュー。

私はAで次のことを試しましたOnCreate

  private DoodleView doodleView;
  doodleView = (DoodleView) findViewById(R.id.doodleView);

  doodleViewWidth = doodleView.getMeasuredWidth(); 
  doodleViewHeight = doodleView.getMeasuredHeight(); 

  Toast.makeText(Doodlz.this, "W=" + doodleViewWidth + "H= "+doodleViewHeight, Toast.LENGTH_LONG).show();

そして、トーストはWとHの両方で0を報告します。

メインアクティビティAで拡張ビューのディメンションを取得することはできますか?GetActivityResultこのメインアクティビティには、DoodleViewディメンションに従ってインポートする画像を操作する必要があるものが他にもあるので、これをお聞きしたいと思います。

どうもありがとう!

4

1 に答える 1

0

これでうまくいくはずです:

doodleView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        doodleViewWidth = doodleView.getWidth(); 
        doodleViewHeight = doodleView.getHeight();
        // here goes your code...
    }
});

編集:onGlobalLayout()が少なくとも1回呼び出されない限り(または0になるまで)、2つの変数にアクセスできないことに注意してください。何がいつ必要になるかによって、コードの値は異なって見えます。値を使用するコードをonGlobalLayout()メソッドに配置するか、ハンドラーを使用してメッセージを送信し、ハンドラーのhandleMessage()で処理しますか。

于 2013-02-24T06:28:18.047 に答える