Jac*_*ack 70 java android touchscreen long-click
我目前正在使用
onTouchEvent(MotionEvent event){
}
Run Code Online (Sandbox Code Playgroud)
检测用户何时按下我的glSurfaceView是否有办法检测何时进行长按.我猜我是否在开发文档中找不到多少,那么它将是某种方法的工作.类似于注册ACTION_DOWN并查看ACTION_UP之前的时间.
你如何使用opengl-es检测android上的长按?
MSq*_*are 149
GestureDetector是最好的解决方案.
这是一个有趣的选择.在每个ACTION_DOWN的onTouchEvent上安排Runnable在1秒内运行.在每个ACTION_UP或ACTION_MOVE上,取消已调度的Runnable.如果从ACTION_DOWN事件中取消的次数少于1 秒,则Runnable将不会运行.
final Handler handler = new Handler();
Runnable mLongPressed = new Runnable() {
public void run() {
Log.i("", "Long press!");
}
};
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView){
if(event.getAction() == MotionEvent.ACTION_DOWN)
handler.postDelayed(mLongPressed, ViewConfiguration.getLongPressTimeout());
if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
handler.removeCallbacks(mLongPressed);
return super.onTouchEvent(event, mapView);
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*ete 104
试试这个:
final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Log.e("", "Longpress detected");
}
});
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
};
Run Code Online (Sandbox Code Playgroud)
我有一个代码,可以检测到点击,长按和移动.它完全是上面给出的答案和我偷窥每个文档页面所做的更改的组合.
//Declare this flag globally
boolean goneFlag = false;
//Put this into the class
final Handler handler = new Handler();
Runnable mLongPressed = new Runnable() {
public void run() {
goneFlag = true;
//Code for long click
}
};
//onTouch code
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
handler.postDelayed(mLongPressed, 1000);
//This is where my code for movement is initialized to get original location.
break;
case MotionEvent.ACTION_UP:
handler.removeCallbacks(mLongPressed);
if(Math.abs(event.getRawX() - initialTouchX) <= 2 && !goneFlag) {
//Code for single click
return false;
}
break;
case MotionEvent.ACTION_MOVE:
handler.removeCallbacks(mLongPressed);
//Code for movement here. This may include using a window manager to update the view
break;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我确认它正在工作,因为我在我自己的应用程序中使用它.
归档时间: |
|
查看次数: |
103607 次 |
最近记录: |