Phi*_* E. 6 android android-layout android-viewpager viewpagerindicator
我正在尝试使用选择器为ViewPager实现一个简单的点指示器.
当页面改变时,点应该改变颜色和大小,但它们只改变颜色,而大小保持不变.
选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:shape="oval">
<size
android:height="12dp"
android:width="12dp"/>
<solid android:color="@color/highlight"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<size
android:height="6dp"
android:width="6dp"/>
<solid android:color="@color/light_grey"/>
</shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
用于布局
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/margin_2x"
android:src="@drawable/dot_selector">
</ImageView>
Run Code Online (Sandbox Code Playgroud)
在onCreate()中使用它来显示初始状态:
for (int i = 0; i < mPagerAdapter.getCount(); i++) {
getLayoutInflater().inflate(R.layout.dot_indicator, viewPagerCountDots);
}
viewPagerCountDots.getChildAt(0).setSelected(true);
Run Code Online (Sandbox Code Playgroud)
这看起来像预期的那样
但当我改变页面改变时的选择器状态...
@Override
public void onPageSelected(int position) {
for (int i = 0; i < mPagerAdapter.getCount(); i++) {
viewPagerCountDots.getChildAt(i).setSelected(i == position);
}
}
Run Code Online (Sandbox Code Playgroud)
.. ..看起来像这样:
使子项无效或ViewGroup不执行任何操作.有什么线索这里出了什么问题?
更新
正如Bartek Lipinski所建议的,对孩子调用requestLayout会修复它
@Override
public void onPageSelected(int position) {
for (int i = 0; i < mPagerAdapter.getCount(); i++) {
View dotView = viewPagerCountDots.getChildAt(i);
dotView.setSelected(i == position);
dotView.invalidate();
dotView.requestLayout();
}
}
Run Code Online (Sandbox Code Playgroud)
requestLayout()在onPageSelected回调中添加电话:
@Override
public void onPageSelected(int position) {
for (int i = 0; i < mPagerAdapter.getCount(); i++) {
viewPagerCountDots.getChildAt(i).setSelected(i == position);
viewPagerCountDots.getChildAt(i).requestLayout();
}
}
Run Code Online (Sandbox Code Playgroud)
或者你可以改变你的drawable总是相同的大小,所以这就setSelected足够了:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:shape="oval">
<size
android:width="12dp"
android:height="12dp"/>
<solid android:color="@color/highlight"/>
</shape>
</item>
<item>
<layer-list>
<item android:bottom="3dp"
android:left="3dp"
android:right="3dp"
android:top="3dp">
<shape android:shape="oval">
<size
android:width="6dp"
android:height="6dp"/>
<solid android:color="@color/light_grey"/>
</shape>
</item>
</layer-list>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2013 次 |
| 最近记录: |