Я знаю, что эта ветка довольно старая, но тем не менее я хотел поделиться своим решением этой проблемы, потому что это может быть полезно для некоторых. Это работает довольно хорошо, даже для разных рисунков в зависимости от выбранного состояния.
Во-первых, я определил два массива внутри класса SlidingTabLayout
(это можно легко передать другому классу):
private int[] imageResId = {
R.drawable.multi_random,
R.drawable.single_random,
R.drawable.known_person,
};
private int[] imageResSelected = {
R.drawable.multi_random_selected,
R.drawable.single_random_selected,
R.drawable.known_person_selected
};
private int mOldPosition = 0;
Теперь мы изменим метод populateTabStrip()
внутри SlidingTabLayout
:
for (int i = 0; i < adapter.getCount(); i++) {
View tabView = null;
ImageView tabImageView = null;
if (mTabViewLayoutId != 0) { // HAS TO BE SET FOR THE MOMENT!
// If there is a custom tab view layout id set, try and inflate it
tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
false);
tabImageView = (ImageView) tabView.findViewById(mTabViewTextViewId);
}
if (tabView == null) {
tabView = createDefaultTabView(getContext());
}
if (tabImageView == null && ImageView.class.isInstance(tabView)) {
tabImageView = (ImageView) tabView;
}
int resourceId;
if (i == mViewPager.getCurrentItem()) {
resourceId = imageResSelected[i];
mOldPosition = i;
} else {
resourceId = imageResId[i];
}
tabImageView.setImageResource(resourceId);
tabView.setOnClickListener(tabClickListener);
mTabStrip.addView(tabView);
}
Чтобы обновить изображение в соответствии с выбранной вкладкой, мы добавляем несколько строк в метод onPageSelected
.
// This Method is called once the transition is finished
// Change the drawable of the old one..
ImageView view = (ImageView) mTabStrip.getChildAt(mOldPosition);
view.setImageResource(imageResId[mOldPosition]);
// And now change it of the current one
view = (ImageView) mTabStrip.getChildAt(position);
view.setImageResource(imageResSelected[position]);
mOldPosition = position;
Наконец, нам нужно добавить собственное представление вкладок:
mSlidingTabLayout.setCustomTabView(R.layout.custom_tab, 0);
Как этот
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="16dp"
android:layout_weight="1"
android:src="@drawable/multi_random"
/>
Это решение далеко от совершенства, но работает для моих нужд. Может быть, я мог бы помочь кому-то с этим.
person
puelo
schedule
01.11.2014