2011-10-28 28 views
25

Tôi không thể tìm thấy sự kiện lắng nghe trạng thái phát lại. Tôi chủ yếu quan tâm đến trạng thái play/pause. Tôi đang sử dụng MediaController có nút Play/Pause nhưng tôi có nút phụ cũng điều khiển Play/Pause. Sử dụng nút tùy chỉnh của tôi, tôi có thể play/pause, nhưng nếu tôi play/pause bằng cách sử dụng nút MediaControllerplay/pause, tôi hiện không có cách nào để thay đổi hình ảnh trên nút tùy chỉnh play/pause của mình để phát hoặc tạm dừng.Sự kiện cho trạng thái phát lại VideoView hoặc phát/tạm dừng MediaController

Có sự kiện nào mà tôi không biết nên tôi có thể thực hiện một số công việc trong khi phát/tạm dừng không?

Đây là một câu hỏi rất giống nhau: How to catch event when click pause/play button on MediaController

Trả lời

81

Nếu bạn đang sử dụng MediaController kết hợp với một VideoView, nó phải là tương đối dễ dàng để mở rộng sau này và thêm người nghe của riêng bạn vào nó.

Các VideoView tùy chỉnh sau đó sẽ giống như thế này trong hình thức cơ bản nhất của nó:

public class CustomVideoView extends VideoView { 

    private PlayPauseListener mListener; 

    public CustomVideoView(Context context) { 
     super(context); 
    } 

    public CustomVideoView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomVideoView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void setPlayPauseListener(PlayPauseListener listener) { 
     mListener = listener; 
    } 

    @Override 
    public void pause() { 
     super.pause(); 
     if (mListener != null) { 
      mListener.onPause(); 
     } 
    } 

    @Override 
    public void start() { 
     super.start(); 
     if (mListener != null) { 
      mListener.onPlay(); 
     } 
    } 

    public static interface PlayPauseListener { 
     void onPlay(); 
     void onPause(); 
    } 

} 

Sử dụng nó giống như sử dụng thường xuyên VideoView, với sự khác biệt duy nhất là bây giờ chúng ta có thể treo lên người nghe của chúng ta cho nó.

// Some other code above... 
CustomVideoView cVideoView = (CustomVideoView) findViewById(R.id.custom_videoview); 
cVideoView.setPlayPauseListener(new CustomVideoView.PlayPauseListener() { 

    @Override 
    public void onPlay() { 
     System.out.println("Play!"); 
    } 

    @Override 
    public void onPause() { 
     System.out.println("Pause!"); 
    } 
}); 

cVideoView.setMediaController(new MediaController(this)); 
cVideoView.setVideoURI(...); 
// or 
cVideoView.setVideoPath(...); 
// Some other code below... 

Cuối cùng, bạn cũng có thể khai báo nó trong bố cục xml và tăng cường (như minh họa ở trên) - chỉ cần đảm bảo sử dụng <package_name>.CustomVideoView. Ví dụ:

<mh.so.CustomVideoView android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:id="@+id/custom_videoview" /> 
+0

Thiên tài! Cảm ơn bạn, điều đó đã làm việc hoàn hảo. 50 cho bạn. Tôi không thể chờ đợi cho đến khi tôi biết java cũng như tôi biết những thứ khác như kịch bản hành động. – Ronnie

+1

Rất vui khi được giúp đỡ. :) Nhân tiện, một cuộc gọi đến 'super' thường được thực hiện cùng với việc ghi đè phương thức. Bằng cách ghi đè về cơ bản bạn đang định nghĩa lại phương thức của lớp cơ sở/siêu/lớp cha. Nếu bạn gọi 'super' trong một phương thức được ghi đè như vậy, bạn sẽ giữ lại chức năng của nó, đó là những gì bạn muốn làm nếu mục tiêu của bạn là * thêm * chức năng. Đôi khi bạn có thể muốn * thay thế * chức năng mặc dù, trong trường hợp đó bạn có thể nhận được kết quả mong muốn bằng cách không gọi 'super'. –

+1

ok đó là những gì tôi nghĩ và rất hữu ích để biết, cảm ơn – Ronnie

1

Bạn sẽ có thể thiết lập của riêng bạn MediaController.MediaPlayerControl và ghi đè tạm dừng và bắt đầu

+1

nếu tôi '@ Ghi đè phương thức pause() start(), làm cách nào tôi có thể làm phương thức dispatchEvent (dispatchEvent là phương thức ActionScript) mà tôi có thể nghe trên MediaController tùy chỉnh của mình. Ngoài ra, tôi vẫn muốn tất cả các hành vi thường xuyên của tạm dừng và bắt đầu, tôi có sử dụng 'super' trong trường hợp đó không? Không bao giờ thực sự hiểu siêu – Ronnie

Các vấn đề liên quan