web-dev-qa-db-ja.com

MotionEvent GetY()およびgetX()が誤った値を返す

私は次の状況にあります:

ImageViewとTextViewが連続したカスタムListViewがあります。 ImageViewにはonTouchListenerがあり、wchichは私のonTouchメソッドを呼び出します。ここにいくつかの行があります:

if (event.getAction()==MotionEvent.ACTION_MOVE) {
    layout.leftMargin = (int) event.getX() - dragIcon.getWidth()/2;         
    layout.topMargin = (int) event.getY() - dragIcon.getHeight()/2;
    //Log.d("Tag", "Pozycja: " +  event.getX() +", "+  event.getY());
}
dragIcon.setLayoutParams(layout);

移動が検出されると、新しい画像(ListViewには表示されません)が表示され、x座標とy座標に従って移動を開始します。

問題は、getXとgetYが、ListView全体ではなく、リスト内のImageViewに関連する位置を返すことです(私はそう思います)。したがって、中央のアイテムに触れて指を上にスワイプすると、getYは負の値(ImageView境界より上)を返します。

願わくば、はっきりと説明しました。

画面サイズに関連してこの座標を取得する方法はありますか?ありがとうございました。

17
glodos

getRawX()getRawY()の代わりにgetX()getY()を使用してみてください。

48
Kevin Coppock

getX()およびgetY()は、呼び出されたビューにそれぞれの値を返します。したがって、言いましょう、

ImageView imV = (ImageView)findViewById(R.id.image_view);

次に、を使用してx、yを取得できます

x = imV.getX() + event.getX();
y = imV.getY() + event.getY();

ここでは、imVでonTouchListenerを設定したと仮定します。

5
Debanjan

これが完全な答えです。これにより、一時変数の最後の3つのイベントがキャプチャされます: https://stackoverflow.com/a/54438485/1931228

0
Pier Betos