Java Android应用程序如何在视频视图中触发长按事件

Java Android应用程序如何在视频视图中触发长按事件,java,android,android-layout,android-imageview,android-view,Java,Android,Android Layout,Android Imageview,Android View,我一天之内就有一份关于这个问题的调查报告。 我的意思是在点击视频视图一段时间时如何显示祝酒词 下面是我发现的 但是这些真的不能解决我的问题。我真的不知道发生了什么? 在视频视图中是否有触发长按事件的功能 这是我的密码 这两件事真的不行 mVideoView.setOnLongClickListener(new OnLongClickListener() { public boolean onItemLongClick(AdapterView<?> arg

我一天之内就有一份关于这个问题的调查报告。 我的意思是在点击视频视图一段时间时如何显示祝酒词

下面是我发现的

但是这些真的不能解决我的问题。我真的不知道发生了什么? 在视频视图中是否有触发长按事件的功能

这是我的密码

这两件事真的不行

    mVideoView.setOnLongClickListener(new OnLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                final int arg2, long arg3) {
            Log.e("devon","onitemlongclick");
            return true;
        }

        @Override
        public boolean onLongClick(View v) {
            Log.e("devon","onLongClick");
            return true;
        }

    });
mVideoView.setOnLongClickListener(新的OnLongClickListener(){
长单击(AdapterView arg0、视图arg1、,
最终整数(arg2,长arg3){
Log.e(“德文郡”、“长点击”);
返回true;
}
@凌驾
仅长按公共布尔值(视图v){
Log.e(“德文郡”、“onLongClick”);
返回true;
}
});
需要帮助!!!谢谢

  • setupViewComponent
    调用中仅添加长单击侦听器
  • 尝试使用onTouch
  • 尝试将OnLongClickListener附加到视频视图的表面
  • 试着用一个透明的imageview/能够抓住焦点的东西来包装视频视图,并将其用作“触摸板”
  • 日志跟踪

这是一个示例,介绍如何创建自己的TouchListsner来管理VideoView上的点击和长点击。在本例中,我将单击的数据的idex和视图的索引传递给侦听器(在后面,我有几个VideoView数组映射到数据列表,就像在适配器中一样)


将其放入布局中,并在
setDeceDantFocusability()
调用中创建布局焦点\u块\u子体。然后捕获布局包装中的长点击,并相应地采取行动…不知道如何。如何尝试在setOnLongClickListener中使用onTouch??无法覆盖这一点,我如何尝试将OnLongClickListener连接到视频视图的表面?好吧,我的好兄弟,有一天你必须学会编码,最好从今天开始。现在剩下要做的就是编写代码,运行几次,看看哪些有效,哪些无效,稍微改进一下,然后再次运行。因此,为了回答您的问题-您没有在
setOnLongClickListener()
中“附加”一个
onTouch()
,您可以通过
setOnTouchListener()
来“附加”它。
/**
 * Simple OnTouchListenerIndexed with Indexes for VideoView ClickListeners 
 * You have to handle longClick and click by yourself 
 */
private abstract class OnTouchListenerIndexed implements OnTouchListener {
    private static final int LONG_CLICK_DURATION=600;//in millis
    int dataIndex = INDEX_NOT_DEFINED;
    int imageViewIndex = INDEX_NOT_DEFINED;
    long timeActionDown;
    AtomicBoolean stillNotConsumed=new AtomicBoolean(true);
    AtomicBoolean actionDone=new AtomicBoolean(false);

    public OnTouchListenerIndexed(int dataIndex, int imageViewIndex) {
        this.dataIndex = dataIndex;
        this.imageViewIndex = imageViewIndex;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            timeActionDown=System.currentTimeMillis();
            stillNotConsumed.set(true);
            actionDone.set(false);
            //launch LongClick in 1s
            v.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if(stillNotConsumed.get()){
                        stillNotConsumed.set(false);
                        actionDone.set(true);
                        onLongTouch(dataIndex, imageViewIndex);
                    }
                }
            },LONG_CLICK_DURATION);
            //consumed
            return true;
        }else if(event.getAction() == MotionEvent.ACTION_UP){
            long timeActionUp=System.currentTimeMillis();
            stillNotConsumed.set(false);
            if(actionDone.get()){
                //do nothing
                return true;//you have consumed it
            }else {
                actionDone.set(true);
                //Check Click or LongClick
                if (timeActionUp - timeActionDown > LONG_CLICK_DURATION) {
                    //une seconde plus tard
                    return onLongTouch(dataIndex, imageViewIndex);
                } else {
                    return onTouch(dataIndex, imageViewIndex);
                }
            }

        }else{
            //don't consume it
            return false;
        }
    }


    public abstract boolean onTouch(int dataIndex, int imageViewIndex);
    public abstract boolean onLongTouch(int dataIndex, int imageViewIndex);
}