2016-03-31 12 views
2

私は次の問題に直面しています: ボタンをドロップすると、ドラッグして元の位置に戻ることができる画面上に4つのボタンがあります。OnCreate()内のオブジェクトのスクリーン位置を取得する

これを行うには、getX()およびgetY()関数を使用して結果を配列に書き込むことによって、特定のデバイス上のボタンの特定の位置を読み取る必要があります。

buttons[0][0] = button.getX(); 
buttons[0][1] = button.getY(); 

私はどんなことなく、元の位置を読み出すための方法を考えていますビューがまだインスタンス化されていない原因(位置は常に(0,0)のonCreateまたはONSTARTでこれらの関数を使用することはできないので余分なコーディング。

どうもありがとう

答えて

1

あなたonCreateonResume -thoughは、よりすべてのボタン(または活動のちょうど根の祖先であるビューへの参照を意味-getを作ること最も簡単なものにする)、次にこれを行う:

rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 

    // Read values here. 
    buttons[0][0] = button.getX(); 
    buttons[0][1] = button.getY(); 
    } 
}); 
+0

など、魔法のように動作するだけであなたはそれが必要なとき、彼らは実際にボタンをドラッグしていないときにそれをスキップし、設定、およびすべてのレイアウトパスのためにそれを呼び出していないことの利点を持っています! :) – DWOME

1

あなたは「余分なコーディング」が何であるか分かりませんが、ボタンに触れるとすぐに位置をキャプチャするようにOnTouchListenerを使用する(または既に使用しているものを修正する)こともできます彼らがどこにでもドラッグする前に(私はそれがACTION_DOWNと思う)。

これは

+0

これは実際には私が "余分なコーディング"を意味するものでしたが、あなたのフィードバックにも感謝しています!私はすぐにあなたが投票して、私は15の評判を得ます。 :) – DWOME

関連する問題