2011-05-30 13 views
50

Bu kod satırlarını yazdım:Android: Bir VideoView'a neden bir onClickListener veremiyorum?

 mVideoView = (VideoView) findViewById(R.id.video_view); 
    mVideoView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.v("LOG_TAG, click"); 
     } 
    }); 

Ancak, uygulamamı çalıştırdığımda tıklama olayı hiç çağrılmıyor.

Yani, bir OnViewListener'ı bir VideoView'e kaydetmek imkansız mı? Ve eğer öyleyse, neden bu durumda?

+0

mb ayarlanabilir duruma geçme gereksinimi: true? mVideoView.setClickable (doğru); – Peter

cevap

0

VideoView, mdeiaplayer ve surfaceView içeren bir sarıcıdır. MediaController ile etkileşime girebilir veya kendi SurfaceView'unuzu yazabilir ve onClick olaylarını uygulayabilirsiniz. Sen deneyebilirsiniz o VideoView

71

kullanım VideoView.setOnTouchListener(..)Gesture Overlay View

Sen dokunma olaylarını almak için başka bir görünümün üstünde bu görüşü bindirmek mümkün olmalıdır.

Bu yardımcı olur umarız!

0

için çalışır

+0

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. – sashoalm

+0

d'oh. Bunu yazdığımda bir acemi oldum :) – Codeman

2

Bu, muhtemelen benzer bir sorunla karşılaşanlara yardımcı olmak için uzun zamandır gecikmiştir. Bu problemi aşmamın yolu, video görüntüsünün hemen üstüne şeffaf bir görüntü görüntüsü yerleştirmek, sonra resim görünümünde onClick olaylarını dinlemek ve daha sonra video görüntüsü ile yapmak istediğim şeyi yapmaktı.

-3

Bunu, onSetClickListener ile yaptım mümkündür. İşte

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(); 
      } 
     } 
    }); 
+2

İnsan, bu tam olarak OP'in yaptığı şeyi söylüyor! Asıl nokta, video oynatıldığında çalışmadığıdır. – Alex

13

Ben onTouch kullanarak VideoViews arasında duraklama/oyun nasıl çözdüğünü oluyor: Ve İşte Yardımlarınız için bir şifredir

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

"Resume()' nin çalışmadığı yerler için; Burada çözüm [Yığın] (http://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCkQFjAA&url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F11960730 % 2Fresume oynama-videoview-den-onresume ve ei = JmbjUqmGK8P9rAe29IDYBA & USG = AFQjCNHWIPXnoKBCfV4ctFukFPDXYl303g & sig2 = NJyXl7J9j8FA3AOBEmIXow ve BVM = bv.59930103, d.bmk) – BlueSword

+0

'bVideoIsBeingTouched' değişkeninin amacı nedir? Görebildiğim kadarıyla sadece yeniden yazıyorsun ama onu kullanmıyorsun. – Jerry

13

Bu eski ama bunu kullandım biliyorum:

mVideoView.setOnTouchListener(new View.OnTouchListener() 
    { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

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

      return false; 
     } 
    }); 
+0

Bu parçacığı kullanmayı denedim ancak tıklattığımda, etkinlik kapanıyor ve uygulama kapanıyor. – vhbsouza

+0

Evet, aynı şeyi yaptım ve şimdi benim için çalışıyor. –

12

Ben bu ve eski bir soru, ama burada ne yaptığını biliyorum:

setOnClickListener yana

tetiklendi değil, benim yarattığım benim VideoView

public class VideoViewCustom extends VideoView{ 

ve overrided uzanır kendi sınıf onTouchEvent

@Override 
public boolean onTouchEvent(MotionEvent ev) { 

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

    return super.onTouchEvent(ev); 
} 

ve şimdi MotionEvent ile onClick olayı alabilirsiniz.

Bu birinin işe yaramasını umarız!

+8

Genel olarak, "tıklat" için dokunma olayları, kullanıcının ACENT_DOWN üzerinde değil, kullanıcının tıklamaya niyetini belirtmesine izin vermek için ACTION_DOWN üzerinde değil. ACTION_CANCEL gibi diğer etkinlikler bu yüzden var. Kullanıcı basmaya başlar, ardından işaretçisini görünümün sınırları dışına taşır. – Dallas

+0

Dallas haklı, o ACTION_UP yerine ACTION_DOWN –

+4

arasında sadece bu sorun üzerinde geldi olmalı ve ben ACTION_UP genellikle daha iyi bir uygulama olduğunu kabul ama bu durumda VideoView sadece ACTION_DOWN sağlamak gibi görünüyor! –

1

Videonun belirli bir bölümünü bir şey yapmak için dokunmak istiyorsanız, video görünümünde şeffaf olan bir düğmeyi de kullanabilirsiniz.

2

Bunun eski bir soru olduğunu anlıyorum, ancak kolay bir çözüm bulabileceğimi düşündüm. Bu işe yaramazsa nedennumaralı telefona cevap veremiyorum - bence büyük bir gözetim gibi görünüyor. Ancak, kolay bir çözüm, VideoView'unuzu bir FrameLayout içinde tek Görünüm olarak yerleştirmek ve düzende bir OnClickListener ayarlamaktır. İdeal değil ama işe yarıyor.

İlgili konular