2016-09-22 79 views
2

我是Android TV中的新手。請看下面的附圖。ViewPager喜歡AndroidTV中BrowseFragment的東西

enter image description here

在這幅畫的頂部有一個crousel,所有的紅色標記的區域是圖像。

我想在Android TV中製作此屏幕。我爲此使用了BrowseFragment。第一排使用兩臺Presenter,另一排使用另一臺Presenter。

我所使用的代碼:

HomeFragment.java

private CustomListRowPresenter mListRowPresenter; 
    private void loadRows() { 
     List<Movie> list = MovieList.setupMovies(); 
     mListRowPresenter = new CustomListRowPresenter(getActivity(),this); 
     mRowsAdapter = new ArrayObjectAdapter(mListRowPresenter); 
     CardPresenter cardPresenter = new CardPresenter(getActivity()); 

     mNumberOfRows = NUM_ROWS; 
     HeaderItem gridHeader = new HeaderItem(0, ""); 
     GridItemPresenter mGridPresenter = new GridItemPresenter(); 
     ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(mGridPresenter); 
     gridRowAdapter.add(getResources().getString(R.string.grid_view)); 
     gridRowAdapter.add(getString(R.string.error_fragment)); 
     gridRowAdapter.add(getResources().getString(R.string.personal_settings)); 
     mRowsAdapter.add(new ListRow(gridHeader, gridRowAdapter)); 

     int i; 
     for (i = 1; i < NUM_ROWS; i++) { 
      if (i != 0) { 
       Collections.shuffle(list); 
      } 
      ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter); 
      for (int j = 1; j < NUM_COLS; j++) { 
       listRowAdapter.add(list.get(j % 5)); 
      } 
      HeaderItem header = new HeaderItem(i, MovieList.MOVIE_CATEGORY[i]); 
      mRowsAdapter.add(new ListRow(header, listRowAdapter)); 
     } 



     setAdapter(mRowsAdapter); 

    } 

CardPresenter.java

public class CardPresenter extends Presenter { 
    private static final String TAG = "CardPresenter"; 

    private static int CARD_WIDTH = 360; 
    private static int CARD_HEIGHT = 160; 
    private static int sSelectedBackgroundColor; 
    private static int sDefaultBackgroundColor; 
    private Drawable mDefaultCardImage; 
    private Activity mActivity; 

    public CardPresenter(Activity activity){ 
     mActivity = activity; 
    } 

    public CardPresenter(){ 
    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent) { 
     Log.d(TAG, "onCreateViewHolder"); 

     sDefaultBackgroundColor = parent.getResources().getColor(R.color.default_background); 
     sSelectedBackgroundColor = parent.getResources().getColor(R.color.selected_background); 
     mDefaultCardImage = parent.getResources().getDrawable(R.drawable.movie); 
/* 
     ImageCardView cardView = new ImageCardView(parent.getContext()) { 
      @Override 
      public void setSelected(boolean selected) { 
       updateCardBackgroundColor(this, selected); 
       super.setSelected(selected); 
      } 
     }; 

     cardView.setFocusable(true); 
     cardView.setFocusableInTouchMode(true); 
     cardView 
       .setBackgroundResource(R.drawable.gridview_cell_border); 
     updateCardBackgroundColor(cardView, false);*/ 

     View view = mActivity.getLayoutInflater().inflate(R.layout.gridview_cell_rows, parent, 
       false); 
     LinearLayout linearLayout = (LinearLayout)view.findViewById(R.id.container_grid_view_item); 
     linearLayout.setBackgroundResource(R.drawable.gridview_cell_border); 

     view.setFocusable(true); 

     ViewHolder viewHolder = new ViewHolder(view); 
     return viewHolder; 

    } 

    private static void updateCardBackgroundColor(ImageCardView view, boolean selected) { 
     int color = selected ? sSelectedBackgroundColor : sDefaultBackgroundColor; 
     // Both background colors should be set because the view's background is temporarily visible 
     // during animations. 
     view.setBackgroundColor(color); 
     view.findViewById(R.id.info_field).setBackgroundColor(color); 
    } 

    @Override 
    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 
     Movie movie = (Movie) item; 
     View cardView = (View) viewHolder.view; 
     ImageView imageView = (ImageView)cardView.findViewById(R.id.imageView); 
     LinearLayout linearLayout = (LinearLayout)cardView.findViewById(R.id.container_grid_view_item); 
     linearLayout.setBackgroundResource(R.drawable.gridview_cell_border); 
     Log.d(TAG, "onBindViewHolder"); 
     if (movie.getCardImageUrl() != null) { 
      /* cardView.setTitleText(movie.getTitle()); 
      cardView.setContentText(movie.getStudio()); 
      cardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT);*/ 
      Glide.with(viewHolder.view.getContext()) 
        .load(movie.getCardImageUrl()) 
        .centerCrop() 
        .error(mDefaultCardImage) 
        .into(imageView); 
     } 


    } 

    @Override 
    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 
     Log.d(TAG, "onUnbindViewHolder"); 
     View cardView = (View) viewHolder.view; 
     // Remove references to images so that the garbage collector can free up memory 

    } 

因此,對於第一行i已經使用CardPresenter以及用於其它我已經使用GridPresenter。

我的要求是這個viewpager類型的東西應該每5秒自動旋轉一次。

所以請幫我我怎麼設計這個片段。

+0

https://github.com/sayyam/carouselview會幫到你 –

+0

謝謝@AnshulTyagi。我可以在android電視中使用這個庫嗎? –

+0

是的,我認爲會的。 –

回答

0

Creating a Catalog Browser所述,如果您希望自定義分段之間的標題視圖,請使用Presenter並實現抽象方法來創建,綁定和取消綁定視圖持有者。在顯示目錄瀏覽器的BrowseFragment實現中,使用setHeaderPresenterSelector()方法設置行標題的演示者或設置項目選擇偵聽器的方法,如以下示例所示。

setHeaderPresenterSelector(new PresenterSelector() { 
    @Override 
    public Presenter getPresenter(Object o) { 
     return new IconHeaderItemPresenter(); 
    } 
}); 

然後,設置使用Timer每個頁面呈現的持續時間如本GitHub post

對於示例代碼實現,這個tutorial也可能有所幫助。

+0

感謝您的答案..現在我使用的BrowseFragment和第一行我使用不同的Presenter。現在,在此演示者中,我使用ViewPager。同時,我在BrowseFragment中獲得的滾動效果並不理想。請建議這是正確的方法,或者我需要一些diiferent來嘗試。 –

+0

你能給我一個想法如何實現上述事情? –

+0

@nitintyagi,你能找出解決方案來實現Android電視上的Carousel。任何指針都會有很大的幫助。 – user1273299