1

ActivityのonCreate でImageView の現在のX & Y座標が欲しいのですが、同じ解決策はありますか? 同じことについてあなたの考えを共有してください。

4

2 に答える 2

1

実際、setContentView()Androidを呼び出すと、ビューの描画が表面に開始されます。これは、を使用して観察できます。したがって、現在描画されていないため、 inviewTrewwObserveの高さと幅を取得することはできません。ImageViewonCreate()

使用できます(未試行)

imageView.getViewTreeObserver().addOnGlobalLayoutListener(
 new ViewTreeObserver.OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout() {
    // Get ImageView height width here <------------
  }
});

グローバルレイアウト状態またはビューツリー内のビューの可視性が変更されたときに呼び出されるコールバックを登録します。

アップデート:

または、を使用できます onWindowFocusChanged (boolean hasFocus)

これは、このアクティビティがユーザーに表示されるかどうかを示す最良の指標です。デフォルトの実装ではキー追跡状態がクリアされるため、常に呼び出す必要があります。

于 2013-02-05T12:00:01.160 に答える
0

(1) を使用して取得するgetViewTreeObserver()か、(2) に非同期タスクを追加できますonCreate()

@Override
protected void onCreate(Bundle savedInstanceState)
{
  //SIMPLY CALL YOUR ASYN TASK WITH DELAY OVER HERE LIKE THIS.

  new MyImageDrawClass().execute();
}



class MyImageDrawClass extends AsyncTask<Void, Void, Void>
{
    @Override
    protected Void doInBackground(Void... params)
    {
        try
        {
            Thread.sleep(100);
        }
        catch(InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result)
    {
        LayoutParams lp = mContent.getLayoutParams();
        value_wdth = mContent.getWidth();
        value_hght = mContent.getHeight();

        //PERFORM YOUR OTHER DRAWING STUFF..
        super.onPostExecute(result);
    }

}

これで問題が見つかった場合はお知らせください。時間の遅延を減らすこともできます。Thread.sleep(10); 私は通常、この方法を使用して高さと幅を取得します。

于 2013-02-05T12:08:15.863 に答える