- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在开发一个非常简单的应用程序。只有一个音乐文件、一个播放按钮,什么也没有。我试图做到这一点,以便在单击按钮时开始播放音乐,但我想让用户按住停止按钮 2 秒钟,直到停止播放,以防用户在 2 秒内释放按钮秒,计时器应该终止。
import android.app.ActionBar;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import java.util.Timer;
import java.util.TimerTask;
import static com.example.appname.R.raw.sound;
public class MainActivity extends ActionBarActivity {
boolean isPlaying = false;
ImageButton button;
MediaPlayer mp;
Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (ImageButton) findViewById(R.id.playButton);
mp = MediaPlayer.create(this, sound);
button.setOnClickListener(imgButtonHandler);
}
View.OnClickListener imgButtonHandler;
{
imgButtonHandler = new View.OnClickListener() {
public void onClick(View v) {
if (!isPlaying) {
mp.start();
isPlaying = true;
button.setImageResource(R.drawable.stop);
button.setOnTouchListener(imgButtonTouchHandler);
}
}
};
}
View.OnTouchListener imgButtonTouchHandler;
{
imgButtonTouchHandler = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// PRESSED
if (isPlaying) {
button.setImageResource(R.drawable.stop_highlighted);
timer.schedule(stopMusic(), 2000);
return true;
} else {
return false;
}
case MotionEvent.ACTION_UP:
if (isPlaying) {
if (timer != null){
timer.cancel();
timer = null;
}
return true;
} else {
return false;
}
// RELEASED
}
return false;
}
};
}
public TimerTask stopMusic() {
mp.reset();
mp = MediaPlayer.create(MainActivity.this, sound);
button.setImageResource(R.drawable.play);
isPlaying = false;
return null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
我收到此错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void java.util.Timer.schedule(java.util.TimerTask, long)”
如果我删除计时器并将 stopMusic()
方法内容导入到 ACTION_UP
部分 - 那么它可以正常工作,但我没有 2 秒要求。看来我无法在 ACTION_DOWN
部分中执行计时器功能。有没有办法让我以不同的方式完成这个任务?还是我的代码有问题?
提前致谢。
最佳答案
您尚未初始化计时器,请先更正此错误。如果没有任何效果,请返回:
Timer timer;
您必须初始化它:
timer = new Timer();
关于java - 在 ACTION_DOWN 触摸事件中使用 Android 计时器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341546/
目前,我为我的绘图应用程序实现了缩放功能,效果很好。只是几行让你知道我在说什么: 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。我应该怎么做才能获得这
我是一名优秀的程序员,十分优秀!