微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android:为什么不能将onClickListener赋予VideoView?

如何解决Android:为什么不能将onClickListener赋予VideoView?

| 我已经编写了以下代码行:
 mVideoView = (VideoView) findViewById(R.id.video_view);
    mVideoView.setonClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.v(\"LOG_TAG,click\");
        }
    });
但是,当我运行我的应用程序时,从不调用click事件。 所以我想知道,是否不可能在VideoView上注册OnClickListener?而且,如果是这样,为什么会这样呢?     

解决方法

        使用
VideoView.setOnTouchListener(..)
适用于VideoView     ,        这是我使用onTouch解决VideoViews暂停/播放的方法:
// Class variables
private boolean bVideoIsBeingTouched = false;
private Handler mHandler = new Handler();

vvVideo.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v,MotionEvent event) {
    if (!bVideoIsBeingTouched) {
        bVideoIsBeingTouched = true;
    if (vvVideo.isPlaying()) {
        vvVideo.pause();
    } else {
        vvVideo.resume();
    }
    mHandler.postDelayed(new Runnable() {
        public void run() {
            bVideoIsBeingTouched = false;
        }
        },100);
    }
    return true;
    }
});
    ,        我知道这很旧,但是我用了这个:
    mVideoView.setOnTouchListener(new View.OnTouchListener()
    {
        @Override
        public boolean onTouch(View v,MotionEvent event) {

            Log.i(TAG,\"Video 1 clicked,starting playback\");

            return false;
        }
    });
    ,        我知道这是一个老问题,但这是我所做的: 由于未触发setOnClickListener,因此我创建了自己的扩展VideoView的类
public class VideoViewCustom extends VideoView{
并覆盖了onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent ev) {

    if(ev.getAction() == MotionEvent.ACTION_DOWN){
        Log.d(TAG,\"ACTION_DOWN\");
    }

    return super.onTouchEvent(ev);
}
现在我可以通过MotionEvent获取onClick事件。 希望这对某人有帮助!     ,        尽管可能会遇到类似的问题,但这可能早就应该解决了。解决此问题的方法是,在视频视图的顶部放置一个透明的图像视图,然后在图像视图上侦听onClick事件,然后再对视频视图执行我想做的任何事情。     ,        我意识到这是一个古老的问题,但我想通过一个简单的解决方法来解决。我无法回答为什么这行不通-我认为这似乎是一个很大的疏忽。但是一个简单的解决方法是将VideoView作为唯一的View放在FrameLayout内,并在布局上设置OnClickListener。不理想,但是可以。     ,        如果您希望触摸视频的特定部分来执行操作,则可以很好地使用在视频视图上透明的按钮。     ,        VideoView是包含mdeiaplayer和surfaceView的包装。您可以通过MediaController进行交互,也可以编写自己的SurfaceView并实现onClick事件。     ,        您可以尝试手势叠加视图 您应该能够将此视图叠加在另一个视图之上,以获取触摸事件。 希望这可以帮助!     ,        我可能已经使用onSetClickListener做到了这一点。这是您的帮助代码:
mVideoView.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //Here you put a condition for playing a video when you click on your video view.//
            if(my_video.isPressed())
            {   
                my_video.start();
            } else {
                Toast.makeText(getApplicationContext(),\"Not able to run This Video!\",Toast.LENGTH_LONG).show();
            }
        }
    });
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?