android - 在触摸时,即使我的代码也总是给出右侧位置

标签 android

我正在开发一个Android应用程序,我想知道是否可以检测一个轴固定的运动方向。例如,我想将手机放在 table 上,并在移动时检测方向(左、右、上、下)。距离不是必须的,我只是想知道准确的方向。

谢谢!

我的代码是:

arg1.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View arg0, MotionEvent event) {

                    float startX = 0;
                    float startY;
                    float endX;
                    float endY;
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        startX = (int) event.getX();
                        startY = (int) event.getY();
                        System.out.println("startX" + startX);
                        System.out.println("startY" + startY);
                        break;
                    case MotionEvent.ACTION_MOVE:

                        endX = event.getX();
                        endY = (int) event.getY();
                        System.out.println("endX" + endX);
                        System.out.println("endY" + endY);
                        float sub = endX - startX;
                        System.out.println("sub" + sub);
                        if ((endX - startX) < 100) {
                            arg0.setBackgroundColor(Color.GREEN);

                        }
                        if ((endX - startX) > 100) {
                            try {
                                TextView ph_tv = (TextView) arg0
                                        .findViewById(R.id.textnum);
                                String Pho_no = ph_tv.getText().toString();
                                arg0.setBackgroundColor(Color.RED);
                                Intent intent = new Intent(
                                        Intent.ACTION_CALL, Uri
                                                .parse("tel:" + Pho_no));
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(intent);
                                lv.setBackgroundColor(Color.BLACK);

                            } catch (ActivityNotFoundException e) {
                                Toast.makeText(
                                        getApplicationContext(),
                                        "Error in your phone call"
                                                + e.getMessage(),
                                        Toast.LENGTH_LONG).show();

                            }
                            section(path_name, lv1);

                        }
                        break;

                    case MotionEvent.ACTION_UP:
                        endX = (int) event.getX();
                        endY = (int) event.getY();
                    }
                    return true;
                }

            });

最佳答案

如果您想检测手指移动方向,我认为针对您的情况使用 onTouchListener 并不是一个好的解决方案。我建议你使用手势监听器 这是左和右的示例

class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
                }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }

    }

您可以通过计算 Y 距离来对上下进行相同的操作

如果您对我的回答还有任何其他问题,或者您觉得我的回答不够清楚,请随时在评论中留下问题:)

希望我的回答对您有帮助!

关于android - 在触摸时,即使我的代码也总是给出右侧位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934837/

相关文章:

android - 使用 TabWidget.setDividerDrawable()?

java - 如何在 Java (Android) 中生成正弦扫频

java - 使用 libGDX 的 earclippingtriangulator 和 PolygonSpriteBatch 绘制填充多边形

java - Android 中的 Realm 异步事务顺序结构

android - 单击监听器上的按钮

android - 移动 A/B 测试

android - 如何将 PagerTabStrip 的 TextStyle 设置为粗体?

java - 如何在 Android 上将 xml 转换为 html?

java - 来自类的 Intent 未启动

java - 谷歌地图 API v2 抛出 java.lang.runtimeexception : unable to start activity java. lang.nullpointerexception