Как отслеживать прикосновение к экрану

#java #android #kotlin

Вопрос:

Я хочу написать приложение для серии пенальти, теперь я настроил фон и добавил мяч и вратаря на карту. Как мне сделать так, чтобы, когда я нажимаю на экран, мяч следовал за моим прикосновением к экрану. Как это сделать? Как отслеживать касание на экране и вводить мяч после моего прикосновения.

Основная активность.тыс. т

 class MainActivity : AppCompatActivity() {  override fun onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)  setContentView(R.layout.activity_main)  window.decorView.systemUiVisibility =  View.SYSTEM_UI_FLAG_LAYOUT_STABLE or  View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or  View.SYSTEM_UI_FLAG_FULLSCREEN  }  

activity_main.xml

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;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:layout_width="match_parent"  android:layout_height="match_parent"  android:background="@drawable/main_bg"  tools:context=".MainActivity"gt;   lt;ImageView  android:id="@ id/ball"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:src="@drawable/ball"  app:layout_editor_absoluteX="150dp"  app:layout_editor_absoluteY="500dp"  tools:ignore="MissingConstraints" /gt;   lt;ImageView  android:layout_width="150dp"  android:layout_height="150dp"  app:layout_editor_absoluteX="125dp"  app:layout_editor_absoluteY="300dp"  android:src="@drawable/goalkeeper"   lt;/androidx.constraintlayout.widget.ConstraintLayoutgt;   

Экранное приложение

Ответ №1:

Я нашел ответ на свой вопрос, вам нужно использовать OnTouchListener. Мой код выглядит так:

 ImageView ballView; float xDown = 0, yDown = 0;  @SuppressLint("ClickableViewAccessibility") @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  getSupportActionBar().hide();    ballView = findViewById(R.id.ball);  ballView.setOnTouchListener(new View.OnTouchListener() {  @Override  public boolean onTouch(View view, MotionEvent motionEvent) {  switch (motionEvent.getActionMasked()) {   ///пользователь просто прикоснулся к мячу  case MotionEvent.ACTION_DOWN:  xDown = motionEvent.getX();  yDown = motionEvent.getY();  break;   ///пользователь водит по экрану  case MotionEvent.ACTION_MOVE:  float movedX, movedY;  movedX = motionEvent.getX();  movedY = motionEvent.getY();   float distanceX = movedX - xDown;  float distanceY = movedY - yDown;   ballView.setX(ballView.getX()   distanceX);  ballView.setY(ballView.getY()   distanceY);   break;  }    return true;  }  });