1

私はループViewPagerを実装しようとしています。私は自分のページの最初と最後に2つのダミーページを追加しました。そして私はTabLayoutをページインジケータとして使用しています。そのため、最初と最後のタブを透明にして無効にする必要がありました。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です:: これは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を実装するためにいくつかのチュートリアルを検索しました。彼らのほとんどはViewPagerのページがダイナミックで、4ページ未満しかないので私の場合には適していない少なくとも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

さて、私はこの方法を使用しました 基本的には、選択された方法と選択されていない方法の両方で、最初と最後のタブの中間のアイコンと透明なアイコンのアイコンを設定します。すべてのタブを一度選択してください(最後のページが最初のページのダミーページであるため、最初のページに戻ります)。助けてくれてありがとう。 –

+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のアルファで試してください。 – chornge

+0

申し訳ありません、私はあなたのコメントを誤って読んで、私はあなたが "可視"と思った、知っている。 – chornge

関連する問題