【问题标题】:Change textView while moving finger across buttons在按钮上移动手指时更改 textView
【发布时间】:2014-03-15 20:32:12
【问题描述】:

在我的应用程序中,我有一个活动,其中有 9 个按钮和 1 个textView。当我将手指移过按钮时,我正在使用OnTouchListener 更改textView 中的文本。

这是我的活动的样子:

这是我的 java 代码:

    button1.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 1");
            return false;
        }
    });
    button2.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 2");
            return false;
        }
    });
    button3.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 3");
            return false;
        }
    });
    button4.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 4");
            return false;
        }
    });
    button5.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 5");
            return false;
        }
    });
    button6.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 6");
            return false;
        }
    });
    button7.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 7");
            return false;
        }
    });
    button8.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 8");
            return false;
        }
    });
    button9.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            textView.setText("Button 9");
            return false;
        }
    });

但是这段代码的问题是它只获得了我触摸的第一个按钮的OnTouchListener。简而言之,当我移动手指时,我首先触摸的按钮会更改 textView,而其余按钮则不会。
我也在网上和 stackoverflow 上搜索,我遇到了类似 @ 987654328@ 但我不知道如何使用它,我不确定它是否适用于这种情况。
请帮我解决这个问题!谢谢你的时间。

【问题讨论】:

  • 作为旁注,他们都应该不说return true;
  • @Doomsknight 我没有安卓开发经验。你能解释一下它会有什么不同吗?
  • 触摸监听器应该返回真或假,这取决于他们是否“消费”事件。他们做什么。老实说,我认为这没有什么区别。

标签: android textview android-button


【解决方案1】:

你可以使用setOnClickListener 或 switch case 来做任何你想做的事情 或者你可以在你的活动上implements OnTouchListener 并使用 ACTION_UP

我在这里为你做第一种方法

button1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub 
             textView.setText("Button 1");          

        }
    });

button2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub 
             textView.setText("Button 2");          

        }
    });

你可以继续这个...

【讨论】:

    【解决方案2】:

    您可以使用开关盒:

    //
    button1.setOnTouchListener(this);
    button2.setOnTouchListener(this);
    button3.setOnTouchListener(this);
    button4.setOnTouchListener(this);
    button5.setOnTouchListener(this);
    }
    
     @Override
            public boolean onTouch(View v, MotionEvent event) {
    switch(v.getID())
    {
    case(R.id.btn1):
    {
     textView.setText("Button 1");
     break;
    
    }
    case(R.id.btn2):
    {
     textView.setText("Button 2");
     break;
    }
    case(R.id.btn3):
    {
     textView.setText("Button 3");
    break;
    }
    case(R.id.btn4):
    {
     textView.setText("Button4");
    break;
    }
    case(R.id.btn5):
    {
     textView.setText("Button 5");
    break;
    
    default: // bla
    }          
    
    return true;
            }
    

    【讨论】:

      【解决方案3】:

      这不适用于 Android。如果底层 View 没有通过返回 true 来消耗第一个事件 (ACTION_DOWN),则在它之外发生的任何其他事件将仅由父 View 处理。如果它消耗事件 - 直到 ACTION_UP 之前的所有事件,它本身都将被传递到此视图。

      如果你想实现这样的行为,你需要在单个 View 中处理所有事件,或者重写父 View 的 dispatchTouchEvent 方法来定义你自己在这种情况下的行为。

      【讨论】:

      • 谢谢!你能用一个例子解释你的解决方案吗?
      猜你喜欢
      • 2019-07-29
      • 2018-04-02
      • 1970-01-01
      • 2019-05-18
      • 2014-12-14
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多