У меня проблема с очень простым пользовательским представлением. Его целью является только рисование простой вертикальной пунктирной линии. Я хотел бы изменить цвет линии в соответствии с нажатым состоянием своего родительского контейнера. У меня есть этот код:Нажатое состояние не заполнено для меня.
public class DottedLine extends View {
float density ;
float size;
Paint paint;
public DottedLine(Context context) {
this(context, null, 0);
}
public DottedLine(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DottedLine(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
density = metrics.density;
size = 2 * density; //2dp
paint = new Paint();
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setStrokeWidth(size);
paint.setColor(getResources().getColor(R.color.main_kosapp));
paint.setPathEffect(new DashPathEffect(new float[] {size, size}, 0));
}
@Override
protected void onDraw(Canvas canvas) {
float diff = canvas.getHeight()%size;
Path path = new Path();
path.moveTo(canvas.getWidth()/2, diff/2);
path.lineTo(canvas.getWidth()/2,canvas.getHeight()-diff/2);
if(this.isPressed() || this.isFocused()) {
paint.setColor(getResources().getColor(R.color.light_gray));
} else {
paint.setColor(getResources().getColor(R.color.main_kosapp));
}
canvas.drawPath(path, paint);
}
}
Проблема заключается в том, что метод onDraw
получает не вызывается после того, как я нажимаю точку зрения. Я попытался установить duplicateParentState
в true, но это совсем не помогло. FYI в моем макете у этого представления есть два прямых брата - textviews - оба имеют свой цвет текста, определенный с помощью селекторов, и он работает для этих текстовых просмотров. Что не так с моей реализацией представления? Что мне нужно добавить в класс, чтобы заставить селекторов работать?
попробуйте добавить 'андроид: кликабельны =«истинный»' в xml для вашего пользовательского 'View'. –
попробуйте добавить android: duplicateParentState = "true" в вашем макете для вашего пользовательского представления –