在按钮上移动手指时更改 textView

Posted

技术标签:

【中文标题】在按钮上移动手指时更改 textView【英文标题】:Change textView while moving finger across buttons 【发布时间】: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,而其余按钮则不会。 我也在网上和 *** 上搜索,我遇到了类似 @ 987654328@ 但我不知道如何使用它,我不确定它是否适用于这种情况。 请帮我解决这个问题!谢谢你的时间。

【问题讨论】:

作为旁注,他们都应该不说return true; @Doomsknight 我没有安卓开发经验。你能解释一下它会有什么不同吗? 触摸监听器应该返回真或假,这取决于他们是否“消费”事件。他们做什么。老实说,我认为这没有什么区别。 【参考方案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 方法来定义你自己在这种情况下的行为。

【讨论】:

谢谢!你能用一个例子解释你的解决方案吗?

以上是关于在按钮上移动手指时更改 textView的主要内容,如果未能解决你的问题,请参考以下文章

当用户在视图上移动手指时,我们如何获取在 Android 中的 onTouchListener 中触摸的视图的 id?

如果用户将手指从精灵套件中的按钮上移开,如何停止按钮操作?

Objective C 触摸事件问题

如何在 iphone 中刷新 UITableView?

触摸时图像失真

检测用户何时将手指从 UIScrollView 上移开