2013-03-09 18 views
7

Videonun oynatılacağı (VideoView ile) aynı görüntü içinde ortalanmış bir video başlatmak için bir düğmeyi göstermek istiyorum. Ayrıca, düğmeye bastıktan sonra düğmenin kaybolmasını istiyorum, çünkü MediaController sınıfını, video başladığında Duraklat, Geri Sar, Hızlı İletme eylemlerini gerçekleştirmek için kullanıyorum.Android'de bir VideoView üzerinde oynatma düğmesini gösterme ve gizleme

Bunu nasıl yaparım?

İşte ben bugüne kadar düzeni aşağıdaki gibidir:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

<FrameLayout 
    android:id="@+id/video_frame" 
    android:layout_width="fill_parent" 
    android:layout_height="480px" 
    android:background="#000" 
    > 

    <VideoView 
    android:id="@+id/video_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

</FrameLayout> 

programlı FrameLayout bir ımagebutton ekleyerek denedim ama işe görünmüyor.

+0

bunu doğru anlamak, VideoView içinde bir Düğme yerleştirmek çalıştığınız ile çekilebilir hizalamak için Yerçekimi sabitleri kullanabilir? – crazylpfan

+0

VideoView'un içinde fazla değil. –

cevap

9

OK: Böyle bir şey deneyin ya. Düzen dosyası oldukça basit. Eğer düzen onları tanımlamak amacıyla, birbiri üstüne

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

<FrameLayout 
    android:id="@+id/video_frame" 
    android:layout_width="fill_parent" 
    android:layout_height="480px" 
    android:background="#000" 
    > 

    <VideoView 
    android:id="@+id/video_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

    <ImageButton 
    android:id="@+id/play_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal" 
    android:src="@drawable/ic_launcher" 
    /> 

</FrameLayout> 

FrameLayout görünümü elemanı tabakaları alt öğeleri: Hemen sonra VideoView elemanını bir ımagebutton ekleyin. Böylece, düzende eklenen son öğe üstte çizilir. Imagebutton bu niteliği sahip olduğuna dikkat edin:

android:layout_gravity="center_vertical|center_horizontal" 

Bu özellik FrameLayout içinde ımagebutton ortalar.

Sonraki numara, tıklatıldıktan sonra ImageButton öğesinin kaybolmasını sağlamaktır. Bunu yapmak için ImageButton üzerine setVisibility() yöntemini kullanın:

// Setup a play button to start the video 
    mPlayButton = (ImageButton) findViewById(R.id.play_button); 
    mPlayButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (mPlayer.isPlaying()) { 
       resetPlayer(); 
      } else { 
       playVideo(videoUrl, mVideoView.getHolder()); 
       // show the media controls 
       mController.show(); 
       // hide button once playback starts 
       mPlayButton.setVisibility(View.GONE); 
      } 
     } 
    }); 
0

Bir düğme kullanmak yerine FrameLayout Clickable yapmayı deneyin.

Alternatif olarak, FrameLayout öğesinin altına bir Düğme yerleştirebilir ve onClick olay işleyicisinde View'un görünürlüğünü GONE olarak ayarlayabilirsiniz.

DÜZENLEME: burada ben bu çözüldü nasıl, https://stackoverflow.com/a/7511535/826731

+0

Önerileriniz için teşekkürler! Çerçeveyi tıklanabilir hale getirmeye baktım, ancak kullanıcıya FrameLayout'un işlem yapılabilir olduğuna dair bir gösterge vermem gerekiyordu. Bu yüzden hala VideoView'un üstüne bir şey çizmem gerekiyordu. Neden bir buton değil? SetVisibility() işlevini View.GONE ile çağırmak konusunda haklısınız. Yukarıdaki kendi yanıtımı gör. –

-1

Önalan Drawable denilen FrameLayout bir az bilinen bir özelliği var. Tüm FrameLayout çocuklarının üstündeki üzerinde işlenebilecek bir çekiliş belirtebilirsiniz. Böylece: İşi hile yapacak ve düzeniniz daha verimli olacaktır (daha az görünüm).

düzgün

mFrameLayout.setForegroundGravity(Gravity.XXXX) 
İlgili konular