Я бы попробовал так:
по событию раскрытия OnGroupExpandListener нам приходит позиция раскрываемой группы
onGroupExpand(int groupPosition). GroupPosition передаем в адаптер, чтобы в getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) все затемнять кроме переданного GroupPosition
и вызываем invalidateViews()
А в OnGroupCollapseListener все сбрасываем