2011-05-30 11 views
50

मैंने कोड की इन पंक्तियों को लिखा है:एंड्रॉइड: मैं एक वीडियो व्यू पर ऑनक्लिक लिस्टनर क्यों नहीं दे सकता?

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

हालांकि, जब मैं अपना एप्लिकेशन चलाता हूं, तो क्लिक ईवेंट कभी नहीं कहा जाता है।

तो मुझे आश्चर्य है, क्या एक VideoView पर OnClickListener को पंजीकृत करना असंभव है? और, यदि हां, तो वह मामला क्यों है?

+0

एमबी क्लिक करने योग्य स्थिति सेट करने की आवश्यकता है: सच? mVideoView।setClickable (सही); – Peter

उत्तर

0

वीडियो व्यू एक रैपर है जिसमें mdeiaplayer और surfaceView शामिल है। आप MediaController के माध्यम से बातचीत कर सकते हैं या अपनी खुद की SurfaceView लिख सकते हैं और ऑनक्लिक ईवेंट लागू कर सकते हैं।

71

उपयोग VideoView.setOnTouchListener(..) आप कोशिश कर सकते हैं यह VideoView

0

के लिए काम करता Gesture Overlay View

आप एक और दृश्य के शीर्ष पर इस दृश्य ओवरले करने के लिए आदेश स्पर्श इवेंट प्राप्त करने के लिए सक्षम होना चाहिए।

आशा है कि इससे मदद मिलती है!

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – sashoalm

+0

डी ओह। जब मैं इसे लिखता था तो मैं नौसिखिया था :) – Codeman

2

यह शायद लंबे समय से लंबित है, फिर भी उन लोगों की मदद से जो एक समान समस्या में भाग ले सकते हैं। इस समस्या के आसपास जिस तरह से मैं वीडियो दृश्य के शीर्ष पर एक पारदर्शी छवि दृश्य डाल रहा था, फिर छवि दृश्य पर ऑनक्लिक घटनाओं को सुनकर, और जो भी हो रहा था, उसके बाद मैं वीडियो दृश्य के साथ करना चाहता था।

-3

यह संभव है कि मैंने इसेSetClickListener पर किया है।

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

मैन, यही वही है जो ओपी कहता है कि वह कर रहा है! मुद्दा यह है कि जब वीडियो चल रहा है तो यह काम नहीं करता है। – Alex

13

यहाँ कैसे मैं 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; 
    } 
}); 
+1

उन लोगों के लिए जहां 'फिर से शुरू करें) काम नहीं करता है; यहां समाधान [स्टैक] है (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 खेलने-videoview-से-onresume और Ei = JmbjUqmGK8P9rAe29IDYBA और यूएसजी = AFQjCNHWIPXnoKBCfV4ctFukFPDXYl303g और sig2 = NJyXl7J9j8FA3AOBEmIXow और BVM = bv.59930103, d.bmk) – BlueSword

+0

'bVideoIsBeingTouched' चर का उद्देश्य क्या है? जहां तक ​​मैं देख सकता हूं कि आप इसे फिर से लिख रहे हैं लेकिन आप इसका उपयोग नहीं करते हैं। – Jerry

13

मैं जानता हूँ कि इस पुरानी है, लेकिन मैं यह प्रयोग किया है:

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

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

      return false; 
     } 
    }); 
+0

मैंने इस स्निपेट का उपयोग करने की कोशिश की लेकिन जब मैं क्लिक करता हूं, गतिविधि बंद हो जाती है और ऐप नीचे चला जाता है। – vhbsouza

+0

हाँ, मैंने वही किया, और यह अब मेरे लिए काम कर रहा है। –

12

मुझे पता है कि यह और पुराना सवाल है, लेकिन यहां मैंने जो किया है:

चूंकि setOnClickListener को ट्रिगर नहीं किया गया है, मैंने अपना बनाया ही वर्ग जो VideoView

public class VideoViewCustom extends VideoView{ 

और Overrided फैली onTouchEvent

@Override 
public boolean onTouchEvent(MotionEvent ev) { 

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

    return super.onTouchEvent(ev); 
} 

और अब मैं MotionEvent साथ onClick ईवेंट मिल सकती है।

आशा इस कोई मदद करता है!

+8

सामान्य रूप से, "क्लिक" के लिए ईवेंट स्पर्श करें केवल ACTION_UP पर उपभोग किया जाना चाहिए, ACTION_DOWN नहीं, उपयोगकर्ता को क्लिक करने के इरादे को व्यक्त करने की अनुमति देने के लिए। यही कारण है कि ACTION_CANCEL जैसी अन्य घटनाएं मौजूद हैं। उपयोगकर्ता प्रेस करना शुरू कर देता है, फिर दृश्य के सीमाओं के बाहर अपने पॉइंटर को स्थानांतरित करता है। – Dallas

+0

डलास सही है, यह ACTION_DOWN –

+4

के बजाय ACTION_UP होना चाहिए, मैं अभी इस समस्या से आया हूं और मैं सहमत हूं कि ACTION_UP आमतौर पर बेहतर अभ्यास है लेकिन इस मामले में वीडियो व्यू केवल ACTION_DOWN प्रदान करता है! –

1

यदि आप कुछ करने के लिए वीडियो पर एक विशिष्ट भाग चाहते हैं तो आप वीडियो दृश्य पर पारदर्शी बटन का उपयोग कर सकते हैं।

2

मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन सोचा कि मैं एक आसान कामकाज के साथ झुकाऊंगा। मैं का जवाब नहीं दे सकता क्यों यह काम नहीं करता है - मेरी राय में एक बड़ी निगरानी की तरह लगता है। लेकिन एक आसान कामकाज है कि अपने वीडियो व्यू को फ़्रेमलेआउट के अंदर एकमात्र दृश्य के रूप में रखें, और लेआउट पर ऑनक्लिक लिस्टनर सेट करें। आदर्श नहीं है, लेकिन यह काम करता है।

संबंधित मुद्दे