Android'de dokunmatik başlama konumunu (X, Y), dokunma hareket konumunu ve ekranın bitiş konumuna dokunmam gerekiyor.
Yanıtlar:
@Override
public boolean onTouchEvent(MotionEvent event)
{
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
}
return false;
}
Üç durum, bu örnekte parmağınızı tekrar dokunarak veya sürükleyerek veya kaldırarak farklı olay türlerine tepki verebilmeniz içindir.
Verilen bir OnTouchListener
private View.OnTouchListener handleTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
};
bazı görünümlere göre ayarlayın:
myView.setOnTouchListener(handleTouch);
Bu size dokunmatik dinleyicinin kendisine atandığı görünüme göre dokunma olayı koordinatlarını verir. Görünümün sol üst köşesi (0, 0). Parmağınızı görünümün üzerinde hareket ettirirseniz, ynegatif olacaktır. Parmağınızı görünümün soluna hareket ettirirseniz, xnegatif olacaktır.
int x = (int)event.getX();
int y = (int)event.getY();
Koordinatların cihaz ekranının sol üst köşesine göre olmasını istiyorsanız, ham değerleri kullanın.
int x = (int)event.getRawX();
int y = (int)event.getRawY();
return falseaksi takdirde dokunuşu tüketecektir.
getRawX()ve getRawY()dinleyicinin eklendiği herhangi bir görünümde dokunma konumunun mutlak koordinatlarını döndürmelidir. Ancak haklısınız, tepesinde geri dönen başka bir görünüm varsa true, dokunma olaylarından daha düşük görünümler bildirilmeyecektir.
getX()ve getY()gayet iyi çalışıyorum (gerek yok getRawX/Y()).
onInterceptTouchEventve ardından falseolayın normal olarak işlenmesi için geri dönebilirsiniz .
İşte Koltin stili, bunu projemde kullanıyorum ve çok iyi çalışıyor:
this.yourview.setOnTouchListener(View.OnTouchListener { _, event ->
val x = event.x
val y = event.y
when(event.action) {
MotionEvent.ACTION_DOWN -> {
Log.d(TAG, "ACTION_DOWN \nx: $x\ny: $y")
}
MotionEvent.ACTION_MOVE -> {
Log.d(TAG, "ACTION_MOVE \nx: $x\ny: $y")
}
MotionEvent.ACTION_UP -> {
Log.d(TAG, "ACTION_UP \nx: $x\ny: $y")
}
}
return@OnTouchListener true
})