Как проверить, нажал ли пользователь на определенную часть экрана? - PullRequest
0 голосов
/ 17 мая 2018

Привет, я новичок в Android Studio, и у меня есть приложение, которое рисует некоторые формы. В настоящее время, когда я нажимаю на экран, приложение удаляет последнюю нарисованную фигуру.

Однако мне нужно удалить фигуры только тогда, когда пользователь нажимает на верхнюю левую 1/16 холста, а затем на нижнюю правую 1/16 холста?

Это то, что я пробовал. Что-то не так с моими getWidth и getHeight?

Это мой onViewCreated

 public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getWidth=view.getWidth();
    getHeight=view.getHeight();

Метод подтверждения OnsingleTap

 public boolean onSingleTapConfirmed(MotionEvent e) {
        Cursor cursor = getLastShape();
        if (cursor.getCount() > 0) {
            cursor.moveToFirst();
        }
        int x1 = (int) e.getX();
        int  y1 = (int) e.getY();

        if((x1<1/16*getWidth) &&(y1<1/16 * getHeight)){
            int x2 = (int) e.getX();
            int  y2 = (int) e.getY();
            if((x2>=getWidth-1/16*getWidth) && (y2>=getHeight-1/16*getHeight)) {
                resolver.delete(Shape.CONTENT_URI, "_id=" + cursor.getInt(cursor.getColumnIndex(Shape.ID)), null);
            }

        }

     return true;



}

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете использовать приведенный ниже код для поиска одинарного и двойного касания в определенном виде.

public class GestureSingleDoubleTap extends AppCompatActivity {

TextView txtTap;
GestureDetector gestureDetector;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gesture_single_double_tap);

    onInit();
}

private void onInit() {

    txtTap = findViewById(R.id.txtTap);
    gestureDetector = new GestureDetector(this, new GestureListener());

    txtTap.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }
    });

}


private class GestureListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    // event when double tap occurs
    @Override
    public boolean onDoubleTap(MotionEvent e) {
        Toast.makeText(GestureSingleDoubleTap.this, "Double Tap Occurred", Toast.LENGTH_SHORT).show();
        return true;
    }

    // event when single tap occurs
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Toast.makeText(GestureSingleDoubleTap.this, "Single Tap Occurred", Toast.LENGTH_SHORT).show();
        return super.onSingleTapConfirmed(e);
    }
}

}

И XML-файл выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context="com.example.GestureSingleDoubleTap">

    <TextView
      android:id="@+id/txtTap"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:gravity="center"
      android:padding="20dp"
      android:text="Tap me Single or Double" />

</RelativeLayout>
...