自定义View StateFilter
时间: 2023-10-13 08:14:01 浏览: 74
自定义 View 的 StateFilter 是用来控制 View 在不同状态下的显示效果的。StateFilter 可以根据 View 的状态(例如:是否被选中、是否可用等)来改变 View 的显示效果(例如:改变背景色、改变文字颜色等)。
以下是一个自定义 View 的 StateFilter 的示例:
```java
public class CustomView extends View {
private int[] mStateSet = new int[]{};
private int mBackgroundColor = Color.RED;
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isSelected()) {
mergeDrawableStates(drawableState, new int[]{android.R.attr.state_selected});
}
return drawableState;
}
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
boolean newBackground = false;
final int[] myDrawableState = getDrawableState();
for (int state : myDrawableState) {
if (state == android.R.attr.state_selected) {
newBackground = true;
break;
}
}
if (newBackground) {
mBackgroundColor = Color.BLUE;
} else {
mBackgroundColor = Color.RED;
}
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(mBackgroundColor);
}
}
```
在上面的示例中,我们创建了一个 CustomView,并且重写了 View 的三个方法:onCreateDrawableState、drawableStateChanged 和 onDraw。在 onCreateDrawableState 方法中,我们根据 View 的状态(是否被选中)来创建一个新的 drawableState 数组。在 drawableStateChanged 方法中,我们根据新的 drawableState 数组来更新 View 的显示效果(改变背景色)。在 onDraw 方法中,我们使用 mBackgroundColor 来绘制 View 的背景色。
可以看到,通过自定义 View 的 StateFilter,我们可以很容易地控制 View 在不同状态下的显示效果。
阅读全文