首先,我要感谢SO,因为他们不知道怎么做。 其次,我对android编程相对较新,现在已经做了大约2周了。
好我的问题:
我正在编写一个应用程序,当您点击屏幕时,您需要拍摄照片。 我设法做到了,但在应用程序的后期阶段,您可以在实时摄像机视图中滚动超过1个画布。 因此,当您点击屏幕上的图片时,图片一定不能拍照,但是当您在X秒钟后触摸并按住屏幕时,它必须采取结果。
因此,如果您在画布上滚动,则在拍摄屏幕时就不会拍照。
如果尝试在ACTION_DOWN
事件上注册当前时间并将其与当前时间+ 5000(毫秒)进行比较
有没有关于如何实现这一目标的消息?
亲切的问候
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
long activateTime = System.currentTimeMillis();
if(event.getAction() == MotionEvent.ACTION_DOWN && activateTime + 5000 == System.currentTimeMillis())
{
takePicture();
}
}
return false;
};
if(event.getAction() == MotionEvent.ACTION_DOWN && activateTime + 5000 == System.currentTimeMillis())
{
takePicture();
}
}
return false;
};
EDIT! 这个源代码对我来说很关键。
这是我找到code的链接!
谢谢你指出我正确的摩擦。
答案 0 :(得分:2)
一些Android组件(例如GestureDetector)这样做的方式是,他们使用Handler来发送延迟消息。例如,在ACTION_DOWN事件中,您可以调用sendEmptyMessageDelayed(int what, long delayMillis),并在ACTION_UP事件调用removeMessages(int what)。如果事件已发送,则表示ACTION_UP从未发生过,这意味着用户手指仍处于关闭状态。然而,这忽略了用户在那里移动手指。所以你可以设置'slop'区域,并检查它们是否随每个ACTION_MOVE一起离开。当用户手指离开slop区域时,您将取消该消息。
您可以阅读GestureDetector源代码here,了解他们是如何做到的。
答案 1 :(得分:0)
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP && event.getEventTime() - event.getDownTime() >= 5000)
Toast.makeText(getApplicationContext(), "CAMERA ACTION", Toast.LENGTH_LONG).show();
return true;
}