私のアプリケーションにはボタンがあります。ボタンをシングルクリックとダブルクリックすると、別々の操作が実行されます。どうやってやるの?ありがとう
10 に答える
シングルクリックとダブルクリックを区別する遅延変数を作成する必要がある場合があります。
このコードを参照してください、
private static final long DOUBLE_PRESS_INTERVAL = 250; // in millis
private long lastPressTime;
private boolean mHasDoubleClicked = false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// Get current time in nano seconds.
long pressTime = System.currentTimeMillis();
// If double click...
if (pressTime - lastPressTime <= DOUBLE_PRESS_INTERVAL) {
Toast.makeText(getApplicationContext(), "Double Click Event", Toast.LENGTH_SHORT).show();
mHasDoubleClicked = true;
}
else { // If not double click....
mHasDoubleClicked = false;
Handler myHandler = new Handler() {
public void handleMessage(Message m) {
if (!mHasDoubleClicked) {
Toast.makeText(getApplicationContext(), "Single Click Event", Toast.LENGTH_SHORT).show();
}
}
};
Message m = new Message();
myHandler.sendMessageDelayed(m,DOUBLE_PRESS_INTERVAL);
}
// record the last time the menu button was pressed.
lastPressTime = pressTime;
return true;
}
DoubleTap を使用しないことを検討することをお勧めします。これは通常の Android の動作ではありません。
私が初めて Android でプログラミングを始めたとき、Android では本当に「難しい」ことを繰り返していました。時間が経つにつれて、それらの多くは非常に悪いアイデアであるために困難であることがわかりました。
iOS アプリを移植する場合、または iOS アプリの動作をエミュレートする場合は、UI を Android スタイルの動作に変換し、longPress やその他の「androidy」ジェスチャを使用することを検討してください。
同様の質問と回答を次に示します。
GestureDetectorを実装し、コードをに配置する必要がありますsingle/double click
。
TestActivity.java
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//putyour first activity call.
}
}
iv.setOnTouchListener(new OnTouchListener() {
GestureDetector gestureDetector = new GestureDetector(context, new MyGestureDetector(context));
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
GestureDetector.java
次に、クラスを作成する必要があります。
public class MyGestureDetector extends SimpleOnGestureListener {
public Context context;
public String phno;
public MyGestureDetector(Context con) {
this.context=con;
}
@Override
public boolean onDown(MotionEvent e) {
return super.onDown(e);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
System.out.println("in Double tap");
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
System.out.println("in single tap up");
//put your second activity.
return super.onSingleTapUp(e);
}
}
@NikolaDespotskiに感謝します。
DOUBLE-TAP の 例は、以下のURLから確認できます。それはlistViewで使用されます。お役に立てば幸いです。
https://nodeload.github.com/NikolaDespotoski/DoubleTapListView/zip/master
私も一度同じ問題が発生しました
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(isFmOn()){
//stopFM
}else{
//do other things
}
}
}
ボタンをクリックするとFMが止まり、ダブルクリックしてもFMが止まりませんでした。私はこれを使って問題を解決しました:
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread.sleep(500);//500ms was enough to finish stopFM before the second click
if(isFmOn()){
//stopFM
}else{
//do other things
}
}
}