Я использую ForegroundLinearLayout (https://github.com/gabrielemariotti/cardslib/blob/master/library-core/src/main/java/it/gmariotti/cardslib/library/view/ForegroundLinearLayout.java). Это довольно простая реализация.Drawable setState возвращает true, но не меняет внешний вид
Однако, я поставил некоторые ForegroundLinearLayouts в RecyclerViews, а иногда (примерно в 50% случаев) нажатое состояние моего переднего плана не будет отображаться до тех пор, пока вид не будет переработан (я прокручиваю вниз по первому экрану Views).
Я думаю, проблема кроется в mForegroundDrawable.setState (getDrawableState()).
Я обнаружил, что drawableStateChanged() вызывается в моем ForegroundLinearLayouts, а getDrawableState() показывает правильные значения, когда я нажимаю и отпускаю View, а mForegroundDrawable.setState (getDrawableState()) даже возвращает true.
Даже неявное обращение к mForegroundDrawable.invalidateSelf() и this.invalidate() в ForegroundLinearLayout не помогло.
Нажатое состояние не будет отображаться примерно на 50% времени на первом экране видов. Использование фона фонового изображения, но на переднем плане нет.
У кого-нибудь есть идеи, что сломано?
Я действительно не хочу обертывать все свои ForegroundLinearLayouts в FrameLayouts.
Границы уже, кажется, правильно установить в 'рисовать()' метод в соответствии с (полный по умолчанию), если макет был изменен или инициализирован.С другой стороны, границы, кажется, не установлены должным образом, если чертеж переднего плана установлен после того, как представление было макетом и нарисовано, так что это единственный случай, когда границы, возможно, не были правильно инициализированы. – corsair992