使用onTouch和onClick在android中的按钮

时间:2017-07-08 05:22:32

标签: android onclick ontouch

我有一个Button,每当用户点击它时,它会增加EditText中的数字,但我希望有一个onTouch方法,当用户将手指放在按钮上时增加速度(连续),像退格一样,当你点击它时,它只删除了一个字母,当你把它保持下来时,它会更快地删除单词,所以我在代码中都有ontouch和onclick,但每当我只点击onTouch触发按钮,我该怎么办?请帮忙吗?我搜索了很多,但找不到任何可以帮助我的东西

以下是我的代码的一部分

     btnFineUp.setOnTouchListener (this);   
            btnFineUp.setOnClickListener (this);

    @override
            public void onClick (View view)
        {
            switch (view.getId ())
            {
                case R.id.btn_fine_up:

                {
                    View     v = findViewById (getCurrentFocus ().getId ());
                    EditText editText;

                    if (v instanceof EditText)
                    {
                        editText = (EditText) v;
                    }
                    else
                    {
                        return;
                    }
                    int calcStateAmp   = +1;

                     if (view.getId () == R.id.btn_fine_up)
                    {
                        calcState_2 = upAndDown.getFineUpAmp () * calcStateAmp;

                        calcStateAmp = calcState_2;

                    }
                    double currentValue;
                    if (StringUtils.isNullOrEmpty (editText.getText ().toString ()))
                    {
                        currentValue = 0;
                    }
                    else
                    {
                        currentValue = Double.parseDouble (editText.getText ().toString ());
                    }
                    switch (getCurrentFocus ().getId ())
                    {
                        case R.id.txt_va1_a:
                        case R.id.txt_va2_a:
                        case R.id.txt_va3_a:
                        case R.id.txt_vb1_a:

                            editText.setText (String.format (Locale.ENGLISH, "%.2f", currentValue + (0.01 * calcStateAmp)));
                            break;
    }


        @Override
        public boolean onTouch (View view, MotionEvent motionEvent)
        {
                switch (view.getId ())
                {
                    case ir.vebko.R.id.btn_fine_up:

                    {
                        View     v = findViewById (getCurrentFocus ().getId ());
                        EditText editText;

                        if (v instanceof EditText)
                        {
                            editText = (EditText) v;
                        }
                        else
                        {
                            return false;
                        }
                        int calcStateAmp   = +1;



             if (view.getId () == R.id.btn_fine_up)
                        {
                            calcStateAmp = calcState_2;

                        }
                        double currentValue;
                        if (StringUtils.isNullOrEmpty (editText.getText ().toString ()))
                        {
                            currentValue = 0;
                        }
                        else
                        {
                            currentValue = Double.parseDouble (editText.getText ().toString ());
                        }

                        switch (getCurrentFocus ().getId ())
                        {
                            case ir.vebko.R.id.txt_va1_a:
                            case ir.vebko.R.id.txt_va2_a:
                            case ir.vebko.R.id.txt_va3_a:
                            case ir.vebko.R.id.txt_vb1_a:

                                editText.setText (String.format (Locale.ENGLISH, "%.2f", currentValue + (0.01 * calcStateAmp)));
                                break;
    }
return true;
}

1 个答案:

答案 0 :(得分:0)

OnTouch本身也会处理OnClick的点击用户操作。因此,点击用户操作会首先引发ActionListener calculatorListener = new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { int x = 9; calc.calculate(x); } }; JButton button9 = new JButton("9"); buttonPanel.add(button9); button9.addActionListener(calculatorListener); JButton button8 = new JButton("8"); buttonPanel.add(button8); button8.addActionListener(calculatorListener); //etc..... 事件;只有当没有监听器监听OnTouch时才会调用OnTouch事件。由于OnClick事件与OnTouchListener相关联,因此您无法调用OnTouch。有关详细信息,请查看此question

根据您的问题,您似乎可以完全跳过OnClickListener,而是同时实施View.OnLongClickListenerView.OnTouchListener

希望有所帮助。