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" />
Nguồn
2011-11-08 05:55:31
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
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'. –
ok đó là những gì tôi nghĩ và rất hữu ích để biết, cảm ơn – Ronnie