2016-07-11 12 views
2

VideoViewの独自のバージョンを実装しています。クラスにはをオーバーレイするImageViewの再生一時停止ボタンが含まれています。すべてはFrameLayoutで包まれています。このクラスを使用するには、クラスから親を削除し、プログラムでFrameLayoutImageViewを作成し、VideoViewImageViewFrameLayoutに追加するカスタム初期化メソッドを呼び出します。最後に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); 
     } 
    }); 
} 
+0

に追加するとき、あなたは、ビューのLayoutParamsを設定する必要があります。あなたの 'video_play'' Drawable'は何色ですか?ブレンドだけではないと確信していますか?どのタイプの 'ViewGroup'が親ですか?実際には、レイアウトXMLを見るのに役立ちます。また、レイアウトでこれをやっていない特別な理由はありますか? –

答えて

2

playPauseImageView.bringToFront(); を試してみて、あなたはコードがOKに見えるのViewGroup

FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); 
videoViewLayout.addView(playPauseImageView, layoutParams); 
playPauseImageView.bringToFront(); 
関連する問題