2015-08-31 60 views
1

我有一些可以是圖片或視頻的網址。我只是想在GridView(2 * 2)中將它們混合在一起。因此,在構建適配器時,如何基於url實例化ImageView或VideoView?在GridView中混合ImageView和VideoView

舊的實現只使用了一個只有圖像和視頻的ImageView的佈局,並使用clickListeners啓動另一個活動來播放視頻。默認圖像被用作所有視頻的佔位符,這很醜陋。

我只想顯示圖像,如果url是圖像,並且視頻的第一幀如果是視頻,如Instagram,但在2 * 2網格內。

回答

1

您可以在網格項目佈局上一起使用ImageView和VideoView。

 <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/post_image_size"> 

      <ImageView 
       android:id="@+id/imageView" 
       android:layout_width="match_parent" 
       android:layout_height="@dimen/post_image_size"/> 

      <VideoView 
       android:id="@+id/videoView" 
       android:layout_width="match_parent" 
       android:layout_height="@dimen/post_image_size" /> 

     </FrameLayout> 

在適配器#getView(),你應該檢查你的網址類型,並設置其中的一個,並設置爲不可見另一個。

if (!isVideo(url)) { 
     videoView.setVisibility(View.GONE); 
     Picasso.with(this).load(imageUrl) 
       .into(imageView); 
    } else { 
     Uri uri = Uri.parse(url); 
     videoView.setVideoURI(uri); 
     videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       imageView.setVisibility(View.GONE); 
       videoView.setBackgroundColor(Color.TRANSPARENT); 
       videoView.requestFocus(); 
       videoView.setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         // start your new activity to play video 
         return false; 
        } 
       }); 
      } 
     }); 
    } 

PS1:我用Picasso來設置ImageView。

PS2:在Instagram中,我們可以使用Instagram API獲取視頻文章的圖像。我們還有mediaType標誌來確定它是一個視頻或圖像。您可以從here.查看Instagram API我開發了一個instagram轉發應用程序。在gridView中,我使用來自視頻帖子的API的圖像。點擊視頻項目時,我也會開始一個新的活動來播放視頻。但是,如果你確實需要拍攝一段視頻,你可以看到這個entry.