The support library v27.1.1 have a new component, CheckableImageButton, which extends AppCompatImageButton and implements interface Checkable.
It looks good but it is hidden with @RestrictTo(LIBRARY_GROUP). It means this is not a public component, and in Google’s suggestion, we shouldn’t use it (or we should disable Lint’s error for Restricted API).