2
VideoView
の独自のバージョンを実装しています。クラスにはをオーバーレイするImageView
の再生一時停止ボタンが含まれています。すべてはFrameLayout
で包まれています。このクラスを使用するには、クラスから親を削除し、プログラムでFrameLayout
とImageView
を作成し、VideoView
とImageView
をFrameLayout
に追加するカスタム初期化メソッドを呼び出します。最後にFrameLayout
が元のインデックスとしてVideoView
の親に追加されます。問題は、ビューがユーザーに表示されないことですが、デバッグ時に親がFrameLayoutを子として持つことがわかります。FrameLayoutにプログラムで追加した後に表示されない
public class PodoVideoView extends VideoView {
// boilerplate constructors removed
// This method must be called to set the functionality of this class.
// reasoning: cannot call getParent() from constructor
public void init(Activity activity) {
// remove VideoView and save its index
ViewGroup parent = (ViewGroup) this.getParent();
int indexInParent = parent.indexOfChild(this);
parent.removeView(this);
// setup layout
final FrameLayout videoViewLayout = new FrameLayout(activity);
videoViewLayout.setBackgroundColor(activity.getResources().getColor(R.color.black));
videoViewLayout.setLayoutParams((new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)));
// add VideoView and play/pause ImageView to layout
videoViewLayout.addView(this);
final ImageView playPauseImageView = new ImageView(activity);
playPauseImageView.setImageResource(R.drawable.video_play);
videoViewLayout.addView(playPauseImageView);
// add layout to parent
parent.addView(videoViewLayout, indexInParent);
// play/pause UX
setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(isPlaying()) {
playPauseImageView.setVisibility(View.VISIBLE);
mp.pause(); // if this doesn't work, use mp.pause() instead of pause()
} else {
playPauseImageView.setVisibility(View.INVISIBLE);
mp.start();
}
}
});
}
});
setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
playPauseImageView.setVisibility(View.VISIBLE);
}
});
}
に追加するとき、あなたは、ビューの
LayoutParams
を設定する必要があります。あなたの 'video_play'' Drawable'は何色ですか?ブレンドだけではないと確信していますか?どのタイプの 'ViewGroup'が親ですか?実際には、レイアウトXMLを見るのに役立ちます。また、レイアウトでこれをやっていない特別な理由はありますか? –