один раз прочитайте ACTION_MOVE на слушателе касания - PullRequest
2 голосов
/ 02 мая 2020

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

Так что, если «harf1» написано как буква слова, оно не будет записано снова.

Вот код:

linearLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {


                switch (event.getActionMasked()){
                    case MotionEvent.ACTION_DOWN:
                        if (isDownWord1(event.getX(),event.getY()))
                            yazi.setText("A");
                        if (isDownWord2(event.getX(),event.getY()))
                            yazi.setText("B");
                        if (isDownWord3(event.getX(),event.getY()))
                            yazi.setText("C");
                        if (isDownWord4(event.getX(),event.getY()))
                            yazi.setText("D");
                        break;
                    case MotionEvent.ACTION_MOVE:
                        if (isDownWord1(event.getX(),event.getY()))
                            yazi.setText(yazi.getText().toString() + "A");
                        if (isDownWord2(event.getX(),event.getY()))
                            yazi.setText(yazi.getText().toString() + "B");
                        if (isDownWord3(event.getX(),event.getY()))
                            yazi.setText(yazi.getText().toString() + "C");
                        if (isDownWord4(event.getX(),event.getY()))
                            yazi.setText(yazi.getText().toString() + "D");
                        break;
                    case MotionEvent.ACTION_UP:
                        yazi.setText("");
                        break;
                }
                return true;
            }
        });
    }

    public boolean isDownWord1(float x,float y){
        if(x < harf1.getRight() && x > harf1.getLeft() &&  y > harf1.getTop() && y < harf1.getBottom())
        return true;
        else
          return false;
    }

    public boolean isDownWord2(float x,float y){
        if(x < harf2.getRight() && x > harf2.getLeft() &&  y > harf2.getTop() && y < harf2.getBottom())
            return true;
        else
            return false;
    }

    public boolean isDownWord3(float x,float y){
        if(x < harf3.getRight() && x > harf3.getLeft() &&  y > harf3.getTop() && y < harf3.getBottom())
            return true;
        else
            return false;
    }

    public boolean isDownWord4(float x,float y){
        if(x < harf4.getRight() && x > harf4.getLeft() &&  y > harf4.getTop() && y < harf4.getBottom())
            return true;
        else
            return false;
    }

Это XML Файл:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/game_screen_bg"
    tools:context=".GameLevel1">

    <TextView
        android:id="@+id/harf1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="93dp"
        android:layout_marginLeft="93dp"
        android:layout_marginTop="475dp"
        android:text="A"
        android:textSize="50dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/harf2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="408dp"
        android:layout_marginEnd="63dp"
        android:layout_marginRight="63dp"
        android:text="B"
        android:textSize="50dp"
        app:layout_constraintEnd_toStartOf="@+id/harf3"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/harf3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="471dp"
        android:layout_marginEnd="95dp"
        android:layout_marginRight="95dp"
        android:text="C"
        android:textSize="50dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/harf4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="188dp"
        android:layout_marginRight="188dp"
        android:layout_marginBottom="114dp"
        android:text="D"
        android:textSize="50dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <TextView
        android:id="@+id/yazi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="108dp"
        android:layout_marginLeft="108dp"
        android:layout_marginTop="200dp"
        android:text="TextView"
        android:textSize="50dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:id="@+id/xxxx"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#10000000"
        android:orientation="horizontal" />

</androidx.constraintlayout.widget.ConstraintLayout>

1 Ответ

0 голосов
/ 02 мая 2020

Прежде чем добавить символ к yazi TextView, вам просто нужно проверить, не совпадает ли последний символ yazi с новым персонажем; поэтому измените корпус переключателя MotionEvent.ACTION_MOVE на:

case MotionEvent.ACTION_MOVE:
    String text = yazi.getText().toString();
    String lastChar = text.substring(text.length() - 1);
    if (isDownWord1(event.getX(), event.getY()) && !lastChar.equals("A"))
        yazi.setText(yazi.getText().toString() + "A");
    if (isDownWord2(event.getX(), event.getY()) && !lastChar.equals("B"))
        yazi.setText(yazi.getText().toString() + "B");
    if (isDownWord3(event.getX(), event.getY()) && !lastChar.equals("C"))
        yazi.setText(yazi.getText().toString() + "C");
    if (isDownWord4(event.getX(), event.getY()) && !lastChar.equals("D"))
        yazi.setText(yazi.getText().toString() + "D");
    break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...