binding.myLayout.setOnTouchListener(
new ConstraintLayout.OnTouchListener() {
public boolean onTouch(View v, MotionEvent m){
int pointerCount = m.getPointerCount();
int pointerId = m.getPointerId(0);
int pointerIndex = m.findPointerIndex(pointerId);
...
return true;
}
}
);Return Wert
Ist der Rückgabewert der
onTouch()-Methodetruebedeutet das, dass das Event nicht verarbeitet wurde und weitergereicht wird. Ist der Rückgabewertfalse, wurde das Event verarbeitet und ist damit beendet.
Beispiel
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/myLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvAnzeige1"
android:layout_width="317dp"
android:layout_height="24dp"
android:text="Anzeigefeld 1"
app:layout_constraintBottom_toTopOf="@+id/tvAnzeige2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.14"
app:layout_constraintVertical_chainStyle="packed"
/>
<TextView
android:id="@+id/tvAnzeige2"
android:layout_width="317dp"
android:layout_height="24dp"
android:text="Anzeigefeld2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvAnzeige1"
app:layout_constraintVertical_bias="0.237"
/>
</androidx.constraintlayout.widget.ConstraintLayout>public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
binding.myLayout.setOnTouchListener(
new ConstraintLayout.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
handleTouch(event);
return true;
}
}
);
}
public void handleTouch(MotionEvent event){
binding.tvAnzeige1.setText("");
binding.tvAnzeige2.setText("");
int pointerCount = event.getPointerCount();
for (int i = 0; i < pointerCount; i++) {
int x = (int) event.getX(i);
int y = (int) event.getY(i);
int id = event.getPointerId(i);
int action = event.getActionMasked();
int actionIndex = event.getActionIndex();
String actionString;
switch (action) {
case MotionEvent.ACTION_DOWN:
actionString = "DOWN";
break;
case MotionEvent.ACTION_UP:
actionString = "UP";
break;
case MotionEvent.ACTION_POINTER_DOWN:
actionString = "PNTR DOWN";
break;
case MotionEvent.ACTION_POINTER_UP:
actionString = "PNTR UP";
break;
case MotionEvent.ACTION_MOVE:
actionString = "MOVE";
break;
default:
actionString = "";
}
String touchStatus ="Pointer:" + i + " Action: " + actionString + "A-Index: " + actionIndex + " ID: " + id + "\n X: " + x + " Y: " + y;
switch (i) {
case 0:
binding.tvAnzeige1.setText(touchStatus);
break;
case 1:
binding.tvAnzeige2.setText(touchStatus);
break;
}
}
}
}