java - 我想在长按 "+"或 "-"按钮时继续增加/减少计数器.... Android setOnLongClickListener

标签 java android widget counter

在 setOnClickListener 的帮助下,我能够在相应的“-”或“-”按钮单击上递增/递减。 但如果我继续按住(长按)“+”或“-”按钮,我想继续增加/减少尊重计数器。就像在 map 中一样,当我们触摸“放大”按钮并将取景器放在其上时, map 会不断放大,直到我们移开手指。

我尝试用 setOnLongClickListener 来做这件事和setOnTouchListener,搜索了stackoverflow论坛但找不到帮助。

这是我的 Android Activity 的完整 Java 代码。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView tv_1= (TextView) findViewById(R.id.tv_1);
    Button btn_1= (Button) findViewById(R.id.btn_1);
    Button btn_2= (Button) findViewById(R.id.btn_2);

    final TextView tv_2= (TextView) findViewById(R.id.tv_2);
    Button btn_3= (Button) findViewById(R.id.btn_3);
    Button btn_4= (Button) findViewById(R.id.btn_4);

    final TextView tv_3= (TextView) findViewById(R.id.tv_3);
    Button btn_5= (Button) findViewById(R.id.btn_5);
    Button btn_6= (Button) findViewById(R.id.btn_6);

    Button btn_7= (Button) findViewById(R.id.btn_7);


    btn_1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        String count=tv_1.getText().toString();
        int cnt= Integer.parseInt(count);
        cnt++;
        tv_1.setText(""+cnt);
        }
    });
    btn_2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        String count=tv_1.getText().toString();
        int cnt= Integer.parseInt(count);
        cnt--;
        tv_1.setText(""+cnt);
        }
    });



    btn_3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        String count=tv_2.getText().toString();
        int cnt= Integer.parseInt(count);
        cnt++;
        tv_2.setText(""+cnt);
        }
    });
    btn_4.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        String count=tv_2.getText().toString();
        int cnt= Integer.parseInt(count);
        cnt--;
        tv_2.setText(""+cnt);
        }
    });


    btn_5.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        String count=tv_3.getText().toString();
        int cnt= Integer.parseInt(count);
        cnt++;
        tv_3.setText(""+cnt);
        }
    });
    btn_6.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        String count=tv_3.getText().toString();
        int cnt= Integer.parseInt(count);
        cnt--;
        tv_3.setText(""+cnt);
        }
    });




    btn_7.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            tv_1.setText(""+0);
            tv_2.setText(""+0);
            tv_3.setText(""+0); 
        }
    });


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

最佳答案

我建议您使用OnTouchListener。我们调用新线程,该线程将一直运行,直到您在 while 循环中按下按钮为止:

public class MainActivity extends Activity implements OnTouchListener {

...
btn_1.setOnTouchListener(this);
...

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
    if (arg1.getAction()==MotionEvent.ACTION_DOWN){
        
        doPressDown();          
    }
    else if (arg1.getAction()==MotionEvent.ACTION_UP){
        
        doPressRelease();
    }

    return true;
}  

private void doPressDown() {
    isPressed = true;
    new Thread(() -> {
        while (isPressed == true) {
            // here we increment till user release the button
        }
    }).start();
}

private void doPressRelease(){
    isPressed = false;
}

}

关于java - 我想在长按 "+"或 "-"按钮时继续增加/减少计数器.... Android setOnLongClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20017287/

相关文章:

java - Android 中带有图像、文本和颜色的按钮背景

java - 检测输入多少单词的算法,也支持多句(Java)

android - 关于android drawable的奇怪问题

Android 小部件不会更新

android - 读取 webview 小部件的 HTML 内容

java - 可重新启动的链接 HashMap 迭代,可能通过 Guava

java - 使用 Gson 解析 JSON(或 java 的替代方案)

java - 从 firestore 获取 int 数据

android - Buggy ListView 让我很难过

python - Tkinter 条目小部件出现问题