星空5G 导航

【Android开发】如何 使得 android长按按钮=多次按下按钮-

2024-08-25编辑:本站
Android系统重复按键的处理~

按钮点击事件里面有 setOnClickListener() 与 setOnLongClickListener(),分别对应着 点击, 和长按 监听,重写这两个方法 做对应的处理即可

可以声明一个按钮的集合,再声明一个boolean数组,用循环设置监听事件,例如:

private Button[] buttons = new Button[10];
private boolean[] ifPressed = new boolean[10];
private String[] audioPathes = new String[]{第一个语音文件的路径, 第二个语音文件的路径.......};
private int[] idOfButtons = new int[]{R.id.第一个button的id, R.id.第二个button的id, ..... };
private Class[i] classes = new Class[]{xxxxActivity.class, xxxxActivity.class, .......};

oncreat(){
for(int i = 0; i<10; i++){
buttons[i] = (Button) findViewById(idOfButtons[i]);
buttons[i].setOnClickListener(new OnClickListener(){
//因为boolean数组初值为false,所以不用初始化为false,直接调用
if(!ifPressed[i]){
//单独写个方法,传入路径播放语音,用Media或者SoundPool都可以
//如果是播放同一个语音的话就不用加路径参数了,audioPathes也不用了
playAudio(audioPathes[i]);
ifPressed[i] = true;
}
Intent intent = new Intent(MainActivity.this, classes[i]);
startActivity(intent);
finish();//要不要结束当前Activity根据你的app要求吧
});
}
}
大概思路就是这样了,直接在网页上打的,排版不是太好,变量名可能也有打错不一样的,还是先理解了自己写吧,这样才有提高。

刚刚重新看了下,buttons数组可以不要,在循环里直接new一个Button就可以了,把
buttons[i] = (Button) findViewById(idOfButtons[i]);
buttons[i].setOnClickListener(new OnClickListener(){});
替换为:
Button button = (Button) findViewById(idOfButtons[i]);
button.setOnClickListener(new OnClickListener(){
就好了

项目遇到需要实现按键点击同时,如果按住也能实现连续音量加的效果

本办法是通过按下标志开启线程固定间隔时间发送动作

重写setOnTouchListener事件

 

  1. btn_bolumeup.setOnTouchListener(new OnTouchListener(){  

  2.             @Override  
  3.             public boolean onTouch(View v, MotionEvent event)  
  4.             {  
  5.                 Log.d("yj.chen","onTouch");  
  6.                    if(event.getAction() == MotionEvent.ACTION_DOWN) {  
  7.                        Log.d("yj.chen","ACTION_DOWN");  
  8.                        longClicked = true;  
  9.                        btn_bolumeup.setBackgroundResource (R.drawable.haier_pop_btn_nor_m);//  
  10.                        Thread t = new Thread(){  
  11.                            @Override  
  12.                            public void run(){  
  13.                                super.run();  
  14.                                while(longClicked)  
  15.                                {  
  16.                                    sendcode = 24;  
  17.                                    sendkeyenvet();  
  18.                                    try{  
  19.                                        Thread.sleep(250);  
  20.                                    }catch(InterruptedException e){  
  21.                                        e.printStackTrace();  
  22.                                    }  
  23.                                    Log.d("yj.chen","run end");  
  24.                                }  
  25.                            }  
  26.                        };  
  27.                        t.start();  
  28.                          
  29.                    } else if(event.getAction() == MotionEvent.ACTION_UP) {  
  30.                        btn_bolumeup.setBackgroundResource (R.drawable.touch_control_btn);//touch_control_btn haier_pop_btn_sel_m  
  31.                        longClicked = false;  
  32.                        Log.d("yj.chen","ACTION_UP");  
  33.                    }  
  34.                 return true;    
  35.   
  36.             }  
  37.         });  


onTouchEvent
按下时,handler 发送message, 处理时,开启更新ui的线程,
松开时,删除message,

相关内容

首页 新知 身健
返回顶部

© 星空5G w.xkyn.com