- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
按住当前按钮 (ACTION_DOWN) 以获取按下时的当前时间。当我松开按钮(ACTION_UP)时,也会读取当前时间,并根据时差剪切和粘贴音频文件。如果用户按下和释放按钮的速度过快,则会生成无效的音频文件。所以想实现无条件按下超过1秒的功能。
Buttons ACTION_DOWN, ACTION_UP 有没有办法在运动事件中实现这样的功能?如果你知道,请帮我一个忙。下面是触摸监听器的源代码。
recordBtn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
long currentDuration = vAudioPlayer.getCurrentDuration();
// 녹음 시작 ( combineList 사이즈가 짝수일 때 )
if (mRecordThread != null) {
if (combineList.size() % 2 == 0) {
mRecordThread.startFileWrite(currentDuration);
combineList.add(currentDuration);
}
}
}
// 버튼, 이미지 뷰 애니메이션
micBg1.setVisibility(View.VISIBLE);
micBg2.setVisibility(View.VISIBLE);
micBg1.startAnimation(animMic1);
micBg2.startAnimation(animMic2);
//userImg.setImageBitmap(userImgBitmap);
userImg.startAnimation(animZoomIn);
// artistImg.setImageBitmap(artistBlurImg);
artistImg.startAnimation(animZoomOut);
break;
case MotionEvent.ACTION_UP: {
long currentDuration = vAudioPlayer.getCurrentDuration();
if (mRecordThread != null) {
// 병합을 시작 ( combineList가 홀수일 때: 레코드 버튼을 눌렀을 때 combineList의 사이즈가 홀수가 된다 )
if (combineList.size() % 2 == 1) {
mRecordThread.stopFileWrite();
File waveFile = new File(RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/")
+ "_" + calTime(combineList.get(combineList.size() - 1), false) + "_uv.pcm");
// 위의 경로에 해당 녹음 파일이 존재하면 wav 파일로 변환,
if (waveFile.exists()) {
copyWaveFile(RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/") + "_" + calTime(combineList.get(combineList.size() - 1), false) + "_uv.pcm",
RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/") + "_" + calTime(combineList.get(combineList.size() - 1), false) + "_u0.wav");
// wav 볼륨 파일 증폭
if (mMp3ConcatThread != null) {
mMp3ConcatThread.startCombine(null, 3333333333333333333L, combineList.get(combineList.size() - 1), currentDuration);
}
}
combineList.add(currentDuration);
// startCombine Thread 분기 처리( if old_position: 0, 3333333333333333333L, 7777777777777777777L, 그 외 )
if (combineList.size() == 2) {
// 0: 처음 한번 녹음할 때
mMp3ConcatThread.startCombine(null, 0, combineList.get(combineList.size() - 2), currentDuration);
} else {
// 그 외: 두번 이상 녹음할 때
mMp3ConcatThread.startCombine(null, combineList.get(combineList.size() - 3), combineList.get(combineList.size() - 2), currentDuration);
}
}
}
}
// 버튼, 이미지 뷰 애니메이션
micBg1.setVisibility(View.GONE);
micBg2.setVisibility(View.GONE);
micBg1.clearAnimation();
micBg2.clearAnimation();
// userImg.setImageBitmap(userBlurImg);
userImg.startAnimation(animZoomOut);
// artistImg.setImageBitmap(artistImgBitmap);
artistImg.startAnimation(animZoomIn);
break;
}
return false;
}
});
最佳答案
你必须检查一下,如果 Action Up 和 down 之间的差异小于 1 分钟,则将 UP Time 设置为停机时间 + 60 秒。这将解决您的问题。你必须把这个逻辑放在这里:
case MotionEvent.ACTION_UP: {
long currentDuration = vAudioPlayer.getCurrentDuration();
//your logic here
if (mRecordThread != null) {
关于android - 如果按钮是ACTION_DOWN,是否可以强行按住1秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553251/
目前,我为我的绘图应用程序实现了缩放功能,效果很好。只是几行让你知道我在说什么: setOnTouchListener(new OnTouchListener() { @Ove
@Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_
当我尝试调试我的程序时,我无法找出错误。 我已经初始化了两个按钮并在它们上使用了 .setOnClickListener。当用户单击按钮时,他们应该会看到一条调试消息在 LogCat 上。但是,每当我
我正在为我的任务制作一个月球着陆器游戏 我有一个按钮并为其设置了一个 onTouchListener(不是 onClick)当按钮按下或 ACTION_DOWN 时,火箭飞起来并在 ACTION_UP
我想让 3 个按钮同时可触摸,这样您就可以触摸一个按钮而无需将手指从另一个按钮上移开。到目前为止,我是按以下顺序使用 ACTION_DOWN、ACTION_POINTER_1_DOWN 和 ACTIO
它只处理 ACTION_DOWN(在新项目中也是如此)。没有事件 ACTION_UP,ACTION_MOVE: public boolean onTouch(View v, MotionEvent e
- 我想通过这个问题完成的主要是区分单击和双击,我想根据单击/双击执行操作 我正在尝试获取第一个和下一个之间耗时 MotionEvent.ACTION_DOWN .我看过this他在哪里问如何获得Mo
我不明白为什么我的按钮的 onClick 方法不起作用。每次单击按钮时,我的 logcat 都会显示 ViewPostImeInputStage Action_Down。 感谢您的帮助! public
对于我正在编写的应用程序,我想在用户将手指从屏幕上移开时调用某个操作。我知道我需要检查 event.getAction() 是否为 ACTION_UP,但我从 getAction() 得到的只是 AC
我遇到了一个有趣的问题...我似乎无法找到解决方案。我正在使用 ObjectAnimator 来旋转 ImageView;但 onTouchListener 似乎只注册了 MotionEvent.AC
我的问题是检测到所有触摸事件,但未检测到 Action_Down 事件。日志导致事件 1、2 而不是 0(向下)。 这是我的代码 final ViewPager homeViewPager = (Vi
为什么ViewGroup的onInterceptTouchEvent只得到ACTION_DOWN?根据文档,只要返回 false,它就应该接收所有事件类型。 http://developer.andr
我创建了一个应用程序,用户必须在其中触摸图像大约 10 秒。所以我注册了 ACTION_DOWN 事件。但是即使用户没有抬起手指,此事件也会在几秒后自动执行 ACTION_UP 事件。这个问题有什么解
您好,我正在尝试对我的一个 View 使用 setOnClickListener。 我的问题是我总是得到 ACTION_DOWN 索引。 我检查了它主要发生的原因是你需要在 onTouch 中返回 t
我正在使用 onTouchListener 进行布局。我想在布局之外点击。我为布局设置了 onTouchListetener。但是运动事件总是显示 ACTION_DOWN。即使我触摸到 View 之外
我正在使用触摸事件进行输入。 MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_UP 均在按下期间调用。它应该只在我的手指离开表面时调用 ACTION_UP。它
只要拇指在我的 ImageView 上,我就想循环执行一些连续的任务。一旦竖起大拇指,我想停止这项工作。为此,我在 ACTION_DOWN 和 ACTION_UP 上设置了一个标志,我正在取消该标志,
为了拥有列表重新排序功能,我求助于 this implementation . 我的问题是,当我尝试在我的 ListView 中拖动一个项目时,我没有收到 ACTION_DOWN 事件。相反,对于单个
我的问题是,当我试图在我的 ListView 中拖动一个项目时,我并不总是得到 ACTION_DOWN 事件。我收到了很多 ACTION_MOVE 事件,只有一个 ACTION_UP 事件。情况并非总
我从 View 扩展了我的类。我重写了 onTouchEvent 函数。但是,我只能得到 ACTION_DOWN 事件。不是任何 ACTION_UP 或 ACTION_MOVE。我应该怎么做才能获得这
我是一名优秀的程序员,十分优秀!