#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;
}
}
}