在X秒上用onTouch拍照

时间:2011-09-17 19:41:19

标签: java android

首先,我要感谢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的链接!

谢谢你指出我正确的摩擦。

2 个答案:

答案 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;
}