Нужна помощь, чтобы рассчитывать на левый или правый свайп

#java #android

#java — язык #Android #java

Вопрос:

Я новичок в программировании для Android, и я пытаюсь выполнить подсчет с помощью левого или правого свайпа.

Чего я хочу, так это когда я провожу пальцем справа налево, он подсчитывает целое число до 10 раз, но не выше 10.

И когда я провожу пальцем слева направо, он подсчитывает целое число до 1, не опускаясь ниже 1.

Примечание: я не говорю о цикле; чего я хочу, так это когда я провожу пальцем каждый раз, когда это увеличивает или уменьшает количество int.

То, что я попробовал, это:

 package com.usd.swipegesture;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.TextView;
import android.widget.Toast;

public class Gesture extends Activity {
    float x1, x2;
    float y1, y2;
    static int b;

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

    // onTouchEvent () method gets called when User performs any touch event on
    // screen
    // Method to handle touch event like left to right swap and right to left
    // swap
    public boolean onTouchEvent(MotionEvent touchevent) {
        switch (touchevent.getAction()) {
        // when user first touches the screen we get x and y coordinate
        case MotionEvent.ACTION_DOWN: {
            x1 = touchevent.getX();
            y1 = touchevent.getY();
            break;
        }
        case MotionEvent.ACTION_UP: {
            x2 = touchevent.getX();
            y2 = touchevent.getY();

            // if left to right sweep event on screen
            if (x1 < x2) {
                // Toast.makeText(this, "Left to Right Swap Performed",
                // Toast.LENGTH_LONG).show();

                //
                b--;
                if (b == 1) {
                    b = 1;

                    if (b == 1) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("1");
                    }

                    if (b == 2) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("2");
                    }

                    if (b == 3) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("3");
                    }

                    if (b == 4) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("4");
                    }

                    if (b == 5) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("5");
                    }

                    if (b == 6) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("6");
                    }

                    if (b == 7) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("7");
                    }

                    if (b == 8) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("8");
                    }

                    if (b == 9) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("9");
                    }

                    if (b == 10) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("10");
                    }

                }
                //
            }

            // if right to left sweep event on screen
            if (x1 > x2) {
                // Toast.makeText(this, "Right to Left Swap Performed",
                // Toast.LENGTH_LONG).show();
                //
                b  ;
                if (b == 10) {
                    b = 10;

                    if (b == 1) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("1");
                    }

                    if (b == 2) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("2");
                    }

                    if (b == 3) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("3");
                    }

                    if (b == 4) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("4");
                    }

                    if (b == 5) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("5");
                    }

                    if (b == 6) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("6");
                    }

                    if (b == 7) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("7");
                    }

                    if (b == 8) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("8");
                    }

                    if (b == 9) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("9");
                    }

                    if (b == 10) {
                        TextView tv = (TextView) findViewById(R.id.textView1);
                        tv.setText("10");
                    }
                }
                //
            }

            break;
        }
        }
        return false;
    }
}
  

но он показывает только значения 1 и 10. Он не показывает никаких значений от 1 до 10.

Мне нужна помощь, чтобы исправить мой код.

Комментарии:

1. разве вы не знаете switch ???

2. но я хочу использовать if statement

3. Для лучшего использования объявляйте TextView tv = (TextView) findViewById(R.id.textView1); перед if только один раз.

4. @PratikButani, я не понял, что вы имеете в виду, на самом деле я хочу, чтобы, если я проведу пальцем вправо или влево, он увеличивался или уменьшался и отображался в текстовом представлении.

Ответ №1:

Просмотрите свой код еще раз :

Смотрите здесь :

 if (b == 1) {
     b = 1; // b is now 1

     if (b == 1) { // if b is 1 then do this 
          TextView tv = (TextView) findViewById(R.id.textView1);
          tv.setText("1");
     }
     .....
  

b всегда равно 1, следовательно, оно показывает значение 1.

Аналогично здесь :

 if (b == 10) {
      b = 10; // b is now 10
      ......
      if (b == 10) { // if b is 10 then do this 
          TextView tv = (TextView) findViewById(R.id.textView1);
          tv.setText("10");
      }
  

b всегда равно 10, следовательно, оно показывает значение 10.

Эти 2 причины, по которым ваш код не показывает другие значения от 1 до 10.

Комментарии:

1. да, я согласен с вами, но я использую ~if (b == 1) { b = 1; } ~ потому что я не хочу опускаться ниже 1

2. if (b == 10) { b = 10; } после удаления этого кода, как мне остановить увеличение int более чем на 10

Ответ №2:

я получил свой ответ:

 package com.usd.swipegesture;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.TextView;
import android.widget.Toast;

public class Gesture extends Activity {
    float x1, x2;
    float y1, y2;
    static int b = 1;

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

    // onTouchEvent () method gets called when User performs any touch event on
    // screen
    // Method to handle touch event like left to right swap and right to left
    // swap
    public boolean onTouchEvent(MotionEvent touchevent) {
        switch (touchevent.getAction()) {
        // when user first touches the screen we get x and y coordinate
        case MotionEvent.ACTION_DOWN: {
            x1 = touchevent.getX();
            y1 = touchevent.getY();
            break;
        }
        case MotionEvent.ACTION_UP: {
            x2 = touchevent.getX();
            y2 = touchevent.getY();

            // if left to right sweep event on screen
            if (x1 < x2) {
                // Toast.makeText(this, "Left to Right Swap Performed",
                // Toast.LENGTH_LONG).show();

                //
                b--;
                if (b < 1) {
                    b = 1;
                }
                if (b == 1) {
                    TextView tv = (TextView) findViewById(R.id.textView1);
                    tv.setText("1");
                }

                if (b == 2) {
                    TextView tv = (TextView) findViewById(R.id.textView1);
                    tv.setText("2");
                }
                if (b == 3) {
                    TextView tv = (TextView) findViewById(R.id.textView1);
                    tv.setText("3");
                }
                //
            }

            // if right to left sweep event on screen
            if (x1 > x2) {
                // Toast.makeText(this, "Right to Left Swap Performed",
                // Toast.LENGTH_LONG).show();
                //
                b  ;

                if (b == 1) {
                    TextView tv = (TextView) findViewById(R.id.textView1);
                    tv.setText("1");
                }

                if (b == 2) {
                    TextView tv = (TextView) findViewById(R.id.textView1);
                    tv.setText("2");
                }
                if (b == 3) {
                    TextView tv = (TextView) findViewById(R.id.textView1);
                    tv.setText("3");
                }
                if (b > 3) {
                    b = 3;
                }

                //
            }

            break;
        }
        }
        return false;
    }
}
  

Комментарии:

1. рассмотрите возможность использования оператора switch вместо нескольких if, он будет работать быстрее, так как он не будет запускаться (b == 2) после того, как он знает, что b = 1, также вы могли бы использовать if else, но это ситуация, для которой предназначен case.

2. хорошо, как мне реализовать оператор switch вместо оператора if в моем коде, дайте мне пример.

3. Я изменил ваш код и опубликовал его в качестве ответа.

Ответ №3:

использование оператора switch для (почти незначительного) эффективного улучшения (помогает каждая мелочь).

по умолчанию, если ни один из случаев не совпадает.

 if (x1 < x2) {
b--;

switch(b){
case 1:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("1");
       break;
case 2:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("2");
       break;
case 3:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("3");
       break;
case 4:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("4");
       break;
case 5:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("5");
       break;
case 6:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("6");
       break;
case 7:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("7");
       break;
case 8:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("8");
       break;
case 9:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("9");
       break;
case 10:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("10");
       break;
default:
if (b < 1) {
b = 1;
}

}

}