【问题标题】:Need help to count on left or right swipe需要帮助来计算向左或向右滑动
【发布时间】:2014-07-02 10:26:46
【问题描述】:

我是 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 之间的任何值。

我需要帮助来更正我的代码。

【问题讨论】:

  • 你不知道switch ???
  • 但我想使用if statement
  • 为了更好地使用,请在if 之前声明TextView tv = (TextView) findViewById(R.id.textView1); 一次。
  • @PratikButani,我没有明白你的意思,我真正想要的是,如果我向右或向左滑动它会增加或减少并显示在文本视图中。

标签: java android


【解决方案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。

这两个是您的代码未显示 1 到 10 之间的其他值的原因。

【讨论】:

  • 是的,我同意你的观点,但我使用 ~if (b == 1) { b = 1; }~ 因为我不想低于 1
  • 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;
    }
}

【讨论】:

  • 考虑使用 switch 语句而不是多个 if,它会运行得更快,因为它知道 b=1 后不会运行 (b==2),你也可以使用 if else,但这是一个情况案例是专为。
  • 好的,我如何用我的代码实现 switch 语句而不是 if 语句,给我一个示例。
  • 我已修改您的代码并将其发布为答案。
【解决方案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;
}

}

}

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多