【问题标题】:Android apps how to fire long press event in video viewAndroid应用程序如何在视频视图中触发长按事件
【发布时间】:2013-07-24 10:16:50
【问题描述】:

我在一天内就这个主题进行了调查。 我的意思是在点击 Videoview 一会儿时如何显示 toast。

以下是我发现的,

Android: Why can't I give an onClickListener to a VideoView?

detect double tap (Double click) or long click in a videoview

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

这是我的代码

这两个事件真的不行。

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

    });

需要帮助!!!谢谢!

【问题讨论】:

  • 将其放入布局中,并在您的 setDecendantFocusability() 调用中制作布局 FOCUS_BLOCK_DESCENDANTS。然后在布局包装器中捕获长按,并采取相应的行动......

标签: java android android-layout android-imageview android-view


【解决方案1】:
  • 在您的 setupViewComponent 调用中添加 OnLongClickListener
  • 尝试使用 onTouch
  • 尝试将 OnLongClickListener 附加到视频视图的表面
  • 尝试用透明的图像视图/可以抓住焦点的东西包裹视频视图,并将其用作您的“触摸板”
  • 发布 logcat。

【讨论】:

  • 不知道如何。如何尝试在 setOnLongClickListener 中使用 onTouch?不能覆盖这个,我该如何尝试将 OnLongClickListener 附加到视频视图的表面??
  • 我的好人,你总有一天要学会编码,不如从今天开始。现在剩下要做的几乎就是编写代码,运行几次,看看哪些有效,哪些无效,稍微改进并再次运行。因此,要回答您的问题 - 您不要在 setOnLongClickListener() 中“附加”onTouch(),而是通过 setOnTouchListener()“附加”它。
【解决方案2】:

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

/**
 * 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);
}

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2015-11-27
    • 2017-04-12
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多