如果我保持屏幕按下,我改变活动,我可以在第二个活动中获得action_up的运动事件



我有一个应用程序,在那里我有一个视频播放器,视频。如果我的手指在屏幕上停留超过0.4秒,它就会结束这个活动,开始录制活动,并自动开始录制。我的问题是:我可以让第二个活动识别当我把我的手指离开屏幕,所以它会停止记录?

当我按住屏幕时调用:

 Intent i = new Intent(VideoPlayerActivity.this, VideoRecorderActivity.class);
                    Bundle extras = new Bundle();
                    extras.putInt("mode", VideoRecorderModes.SEND_ALL_MODE);
                    extras.putInt("index", index);
                    extras.putInt("touches", 2);
                    i.putExtras(extras);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    mPreview.getHolder().removeCallback(VideoPlayerActivity.this);
                    mPreview = null;                        
                    startActivity(i);
                    VideoPlayerActivity.this.finish();

这是在我的第二个活动中调用的,在相机准备好之后:

  touches = getIntent().getExtras().getInt("touches");
    if (touches == 1) {
        mySurfaceView.setPressed(true);
        recordButton.setEnabled(false);
        okButton.setEnabled(false);
        recordButton.setImageResource(R.drawable.shutter_pressed);
        startTime = System.currentTimeMillis();
        timer = new Timer();
        timer.schedule(new TimerDisplayTask(), 0, 500);
        startRecording();
        touches = 0;
        System.out.println("----------------here----------");
    } 

这是第二个活动的表面视图的surfaceviewontouch方法:

mySurfaceView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.i(TAG, "event : " + event.getAction() + "||is?: " + isRecording);
            Log.i(TAG, "touches:" + touches);
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //DO NOTHING
                break;
            case MotionEvent.ACTION_UP:
                if (touches == 1 && isRecording) {
                    Log.i(TAG, "touch up");
                    timer.cancel();
                    timer.purge();
                    if (isRecording) {
                        mySurfaceView.setEnabled(false);
                        Log.i("VideoRecorder blabla", "touche enabled record, ok ,surface: " + recordButton.isEnabled() + "| " + okButton.isEnabled() + "|" + mySurfaceView.isEnabled());
                        stopRecording();
                        recordButton.setImageResource(R.drawable.shutter);
                        touches = 0;
                    }
                } 
                break;
            }
            return false;
        }
    });

我对这个答案做了一些研究,因为我自己也遇到过这个问题。

不幸的是,onTouchEvent不会开火,直到它正在观看的活动中有ACTION_DOWN事件(这是单独的观察和测试,请让我知道,如果我错了)。所以我相信你想做的事情在你想走的路线上是不可能实现的。

我还没有测试过,但如果你使用相同的活动和交换出不同的片段,我相信onTouchEvent不会被重置,所以这个方法可能是一个可能的解决方案,你的问题。

我实际上设法做到这一点与片段,使用FragmentManager作为主要活动,并实现onTouchListener到活动,然后传递命令,我需要从这个活动的片段;

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (Constants.gestureEnabled) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            Log.i(TAG, "current fragment: " + currentFragment);
            if (currentFragment.toString().contains("VideoPlayerFragment")) {
                if (currentFragment instanceof VideoPlayerFragment) {
                    ((VideoPlayerFragment) currentFragment).onActionDown(event.getX());
                }
            } else if (currentFragment.toString().contains("VideoRecorderFragment")) {
                if (currentFragment instanceof VideoRecorderFragment) {
                    ((VideoRecorderFragment) currentFragment).onActionDown();
                }
            }
            break;
        case MotionEvent.ACTION_UP:
            if (currentFragment.toString().contains("VideoPlayerFragment")) {
                if (currentFragment instanceof VideoPlayerFragment) {
                    ((VideoPlayerFragment) currentFragment).onActionUp();
                }
            } else if (currentFragment.toString().contains("VideoRecorderFragment")) {
                if (currentFragment instanceof VideoRecorderFragment) {
                    ((VideoRecorderFragment) currentFragment).onActionUp();
                }
            }
            break;
        default:
            break;
        }
    }
    return gDetector.onTouchEvent(event);
}

最新更新