【Android开发】如何 使得 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事件
btn_bolumeup.setOnTouchListener(new OnTouchListener(){
- @Override
- public boolean onTouch(View v, MotionEvent event)
- {
- Log.d("yj.chen","onTouch");
- if(event.getAction() == MotionEvent.ACTION_DOWN) {
- Log.d("yj.chen","ACTION_DOWN");
- longClicked = true;
- btn_bolumeup.setBackgroundResource (R.drawable.haier_pop_btn_nor_m);//
- Thread t = new Thread(){
- @Override
- public void run(){
- super.run();
- while(longClicked)
- {
- sendcode = 24;
- sendkeyenvet();
- try{
- Thread.sleep(250);
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- Log.d("yj.chen","run end");
- }
- }
- };
- t.start();
- } else if(event.getAction() == MotionEvent.ACTION_UP) {
- btn_bolumeup.setBackgroundResource (R.drawable.touch_control_btn);//touch_control_btn haier_pop_btn_sel_m
- longClicked = false;
- Log.d("yj.chen","ACTION_UP");
- }
- return true;
- }
- });
onTouchEvent
按下时,handler 发送message, 处理时,开启更新ui的线程,
松开时,删除message,