【问题标题】:action on button press and release按钮按下和释放的动作
【发布时间】:2013-10-25 09:46:09
【问题描述】:

目前我有一个调用方法的切换按钮,如果我按下它,切换按钮将被禁用,运行代码并重新启用按钮,如果我再次按下它,再次相同,返回它; s 原始状态。我想改变它,这样当按钮被按住时它会改变状态并运行代码,当我放手时,它会变回来。我怎样才能做到这一点?我可以在这个方法中设置某种监听器吗,是这样的吗?所以我在这个方法中设置了clicklistener,在按钮的句柄上,这里调用的按钮是什么,我必须给它一个名字来附加监听器吗?

public void pushtotalk3(final View view) {

                //if more than one call, change this code
                  int callId = 0;
                  for (SipCallSession callInfo : callsInfo) {
                      callId = callInfo.getCallId();                      
                  }
                  final int id= callId;

        final boolean on = ((ToggleButton) view).isChecked();
        ((ToggleButton) view).setEnabled(false);
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    if (on) {
                        OnDtmf(id, 17, 10);
                        Thread.sleep(10);
                        OnDtmf(id, 16, 9);
                    runOnUiThread(new Runnable() {
                            public void run() {
                                ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy);
                                ((ToggleButton) view).setEnabled(true);
                            }
                        });
                    } else {
                        OnDtmf(id, 18, 11);
                        Thread.sleep(10);
                        OnDtmf(id, 18, 11);
                        runOnUiThread(new Runnable() {
                            public void run() {
                                ((ToggleButton) view).setBackgroundResource(R.drawable.btn_lightblue_glossy);
                                ((ToggleButton) view).setEnabled(true);
                            }
                        });
                    }
                } catch (InterruptedException e) {
                    Log.d(TAG, "Failed to send: " + e.getMessage());
                }
            }
        }).start();
    }

编辑:特别是我想知道如何在使用按钮的“方法版本”中执行此操作。 " 您可以使用 android:onClick 属性为 XML 布局中的按钮分配一个方法,而不是将 OnClickListener 应用于您的活动中的按钮"

我是否将视图投射到切换按钮并使用它?

【问题讨论】:

    标签: android


    【解决方案1】:

    试试这个:

        ToggleButton yourBtn = (ToggleButton) findViewById(R.id.yourbtnid)
        yourBtn.setOnTouchListener(new OnTouchListener() {
    
                            @Override
                            public boolean onTouch(View v, MotionEvent event) {
                                switch (event.getAction()) {
                                case MotionEvent.ACTION_DOWN: {
    
                                    //press
                                    ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy);
                                    ((ToggleButton) view).setEnabled(true);
    
    
                                    return true;
                                }
                                case MotionEvent.ACTION_UP: {
    
                                    //release
                                    ((ToggleButton) view).setBackgroundResource(R.drawable.btn_lightblue_glossy);
                                    ((ToggleButton) view).setEnabled(true);
    
                                    return true;
                                }
                                default:
                                    return false;
                                }
                            }
    
                        });
    

    试试这个,如果你想用 onClick 方法调用,但我不保证什么:

    public void touchButton(View view) {
           view.setOnTouchListener(new OnTouchListener() {
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                 switch (event.getAction()) {
                 case MotionEvent.ACTION_DOWN: {
    
                     //press
                     ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy);
                     ((ToggleButton) view).setEnabled(true);
    
    
                     return true;
                 }
                 case MotionEvent.ACTION_UP: {
    
                     //release
                     ((ToggleButton) view).setBackgroundResource(R.drawable.btn_lightblue_glossy);
                     ((ToggleButton) view).setEnabled(true);
    
                     return true;
                 }
                 default:
                     return false;
                 }
            }
        });
        }
    

    并将其放入您的 XML 项目中:

    android:onClick="touchButton"
    

    【讨论】:

    • 您好,谢谢您的回答,据我了解,有两种方法可以引用您的按钮,此方法,或在 xml 中为按钮命名并调用该方法,我想知道其他版本,我称之为方法名。
    • 不能使用 XML 属性调用 onTouch,只能从 XML 调用 onClick 属性(android:onClick="nameAction")但不能调用 android:onTouch="actiontouch"
    • 哦,可惜了,我很喜欢这种做事方式。谢谢
    • 尝试您的第一种方法,如果我将此代码放入文件中,为什么会出现错误,显示预期的“{”。听者的放置规则是什么?以及按钮的定义?这会发生在 onCreate 中吗?
    【解决方案2】:
        button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
    
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
    
        }
    }
        };
    

    希望对你有帮助

    【讨论】:

    • 谢谢,很好的回答,我已经用另一个问题编辑了我的问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2013-07-29
    • 2015-02-15
    相关资源
    最近更新 更多