私は次の状況にあります:
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境界より上)を返します。
願わくば、はっきりと説明しました。
画面サイズに関連してこの座標を取得する方法はありますか?ありがとうございました。
getRawX()
とgetRawY()
の代わりにgetX()
とgetY()
を使用してみてください。
getX()およびgetY()は、呼び出されたビューにそれぞれの値を返します。したがって、言いましょう、
ImageView imV = (ImageView)findViewById(R.id.image_view);
次に、を使用してx、yを取得できます
x = imV.getX() + event.getX();
y = imV.getY() + event.getY();
ここでは、imVでonTouchListenerを設定したと仮定します。
これが完全な答えです。これにより、一時変数の最後の3つのイベントがキャプチャされます: https://stackoverflow.com/a/54438485/1931228