Ich implementiere meine eigene Version von VideoView
. Die Klasse enthält einen Play-Pause-Button als ImageView
, der die VideoView
überlagert. Alles ist von einem FrameLayout
verpackt. Um diese Klasse zu verwenden, rufe ich eine benutzerdefinierte Initialisierungsmethode auf, die die Klasse von ihrem übergeordneten Element entfernt, die FrameLayout
und ImageView
programmatisch erstellt und dann die VideoView
und ImageView
zu FrameLayout
hinzufügt. Schließlich wird die FrameLayout
zu dem Elternteil der VideoView
als der ursprüngliche Index hinzugefügt. Das Problem besteht darin, dass die Ansicht für den Benutzer nicht sichtbar ist, obwohl ich feststellen kann, dass der Parent das FrameLayout beim Debuggen als untergeordnetes Element hat.Ich kann die View nicht sehen, nachdem ich sie FrameLayout programmatisch hinzugefügt habe
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);
}
});
}
Dieser Code OK aussieht. Welche Farbe hat dein 'video_play'' Drawable'? Bist du sicher, dass es nicht nur hineinpasst? Welche Art von ViewGroup ist der Elternteil? Eigentlich würde es helfen, das Layout-XML zu sehen. Auch einen bestimmten Grund, warum Sie dies nicht nur im Layout tun? –