【问题标题】:How to use Long press and record sound in android如何在android中使用长按并录制声音
【发布时间】:2016-07-14 20:44:24
【问题描述】:

在我的应用中,我需要单击并长按按钮

点击某些东西(调用Itemclick())并长按录制声音

并使用此代码:

 send.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
            {
                recording =false;
                t=new Timer();
                t.scheduleAtFixedRate(new TimerTask() {

                    @Override
                    public void run() {
                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                if(count>=2)
                                    t.cancel();
                                    count++;

                            }
                        });
                    }
                }, 1, 1000);
                break;
            }    
            case MotionEvent.ACTION_MOVE:
            {
                if(count >=2&&!recording)
                {

                     recording=true;
                     count=0;
                     Rec=new Recorder();
                     Rec.startRecord();
                }
                break;

            }
            case MotionEvent.ACTION_UP:
            { 
                t.cancel();
                if(!recording)
                {
                    count=0;
                    Itemclick();
                    break;
                }
                recording=false;
                Rec.StopRecord();
                db.open();
                db.insert_offline(Rec.getName(), true, false);
                listItems.add(Rec.getName());
                type.add("v");
                adapter.notifyDataSetChanged();
                db.close();
                Rec=null;
                break;
            }
           }
            return false;
        }
    });

在这段代码中,我使用了一个计时器来查找长按,但我想要一种简单快捷的方法来做到这一点。

您有什么想法或更好的解决方案吗?

【问题讨论】:

    标签: android long-press


    【解决方案1】:

    您可能可以替换计时器并使用 android 的内置事件侦听器进行单击和保持事件:

    View.OnLongClickListener
    View.OnClickListener

    按照这条路线,您的代码将如下所示。

    send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //code for click event
        }
    });
    
    send.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            //code for hold event... which sounds like you want to begin recording here
            return true; //indicate we're done listening to this touch listener
        }
    });
    
    send.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()){
                case MotionEvent.ACTION_UP:
                { 
                //stop recording voice if a long hold was detected and a recording started
                return true; //indicate we're done listening to this touch listener
                }
            }
            return false;
        }
    });
    

    【讨论】:

    • 一个问题:为什么在你的为什么“return false”中为“onLongClick”“return true”。哪个不同?
    • 取自这篇 SO 帖子:stackoverflow.com/questions/7333608/…onLongClick() - 这将返回一个布尔值,以指示您是否已经消费了该事件并且不应继续进行。也就是说,返回 true 表示您已经处理了该事件,它应该在这里停止;如果您还没有处理它,则返回 false 和/或事件应该继续到任何其他点击监听器。
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多