2017-09-15 83 views
1

我正在嘗試執行循環ViewPager。我在頁面的第一個和最後一個位置添加了兩個虛擬頁面。我使用TabLayout作爲頁面指示器,這就是爲什麼我想將第一個和最後一個選項卡設置爲透明和禁用。 這是我TabLayout當前XML代碼:如何使用ViewPager更改TabLayout中第一個和最後一個選項卡的顏色?

<android.support.design.widget.TabLayout 
    android:id="@+id/tabDots" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_gravity="bottom" 
    app:tabBackground="@drawable/tab_selector" 
    app:tabGravity="center" 
    app:tabIndicatorHeight="0dp" /> 

這是TabLayout提拉XML:

<item android:drawable="@drawable/tab_indicator_default" 
    android:state_selected="false" 
    android:state_focused="false" 
    android:state_pressed="false"/> 

<item android:drawable="@drawable/tab_indicator_selected" 
    android:state_first="false" 
    android:state_last="false" 
    android:state_selected="true"/> 

我試圖state_first和state_last使用,但它不能正常工作。

這是一個欺騙手段,但我已經搜索了一些教程來實現循環ViewPager。他們大多數需要至少4頁,這是不適合我的情況,因爲ViewPager頁面是動態的,可能少於4頁。 請幫忙。

這是我的適配器類:

public class ShopPageAdapter extends PagerAdapter { 
    // This holds all the currently displayable views, in order from left to right. 
    private ArrayList<View> views = new ArrayList<View>(); 

    @Override 
    public int getItemPosition(Object object) { 
     int index = views.indexOf(object); 
     if (index == -1) 
      return POSITION_NONE; 
     else 
      return index; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     View v = views.get(position); 
     if(v.getParent() != null) 
      ((ViewGroup) v.getParent()).removeView(v); 
     container.addView(v); 
     return v; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView(views.get(position)); 
    } 

    @Override 
    public int getCount() { 
     return views.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    public int addView(View v) { 
     return addView(v, views.size()); 
    } 

    public int addView(View v, int position) { 
     views.add(position, v); 
     return position; 
    } 

    public int removeView(ViewPager pager, View v) { 
     return removeView(pager, views.indexOf(v)); 
    } 

    public int removeView(ViewPager pager, int position) { 
     pager.setAdapter(null); 
     views.remove(position); 
     pager.setAdapter(this); 

     return position; 
    } 

    public View getView(int position) { 
     return views.get(position); 
    } 
} 
+0

你可以爲你的pagerAdapter類添加java代碼嗎?以及它被使用的地方(活動,片段等)。你可能需要編程 – chornge

回答

3
tableLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
    @Override 
    public void onTabSelected(TabLayout.Tab tab) { 
     switch (tab.getPosition()) 
     { 

     } 
    } 

    @Override 
    public void onTabUnselected(TabLayout.Tab tab) { 

    } 

    @Override 
    public void onTabReselected(TabLayout.Tab tab) { 

    } 
}); 
+0

這似乎是你的答案格式是錯誤的。 但我想要做的是使第一個和最後一個選項卡「透明」,無論它被選中或不。我可以使用tabSelectedListener實現這個嗎? –

+0

嗯,我使用這種方法, 基本上我設置中間選項卡的圖標和透明圖標的第一個和最後一個選項卡在Selected和Unselected方法。並選擇所有標籤一次(它會回到第一頁,因爲最後一頁是第一頁的空白頁)。謝謝您的幫助。 –

+0

不客氣。 – shenweiwei

1

你想沿着線的東西:

PagerAdapter pagerAdapter = new ShopPageAdapter(getActivity().getSupportFragmentManager()); 
viewPager.setAdapter(pagerAdapter); 
tabLayout.setupWithViewPager(viewPager);   

viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
LinearLayout firstAndLastTabs = ((LinearLayout) tabLayout.getChildAt(0)); 
firstAndLastTabs.setEnabled(false); 
firstAndLastTabs.getChildAt(0).setBackgroundColor(getResources() 
      .getColor(android.R.color.transparent)); 
firstAndLastTabs.getChildAt(0).setClickable(false); 

firstAndLastTabs.getChildAt(tabLayout.getTabCount() - 1).setBackgroundColor(getResources().getColor(android.R.color.transparent); 
    firstAndLastTabs.getChildAt(tabLayout.getTabCount() - 1).setClickable(false); 

第一個和最後一個選項卡的背景顏色將是透明的,點擊這兩個選項卡時,不會觸發點擊事件。

+0

這在我的情況下不可行,我使用tabBackground設置頁面指示器(tabLayout)。當我試圖爲我的選項卡使用getIcon()時,我得到null。我應該改變它嗎? –

+0

哦對,它是不可見的,因爲0使它變得如此透明,它消失了,嘗試用90的alpha。 – chornge

+0

對不起,我誤解了你的評論,我以爲你說「可見」,我已經添加了一些修改,再試一次,讓我知道。 – chornge

相關問題