РЕДАКТИРОВАТЬ : хотя оригинальный ответ, приведенный ниже, работает и его легко настроить, см. этот пост в Android Developer Advocate в Google, если вы хотите / нуждаетесь в более эффективной реализации,Также обратите внимание, что атрибут android:foreground
равен и доступен для всех видов , включая ImageView, по умолчанию в Android M.
Проблема с использованием селекторадля ImageView это то, что вы можете установить его только как фон представления - пока ваше изображение непрозрачно, вы не увидите эффект селектора за ним.
Хитрость заключается в том, чтобы обернуть ваш ImageView в FrameLayout сатрибут android:foreground
, который позволяет нам определять оверлей для его содержимого.Если мы установим android:foreground
для селектора (например, ?android:attr/selectableItemBackground
для уровня API 11+) и добавим OnClickListener
к FrameLayout вместо ImageView, изображение будет наложено на рисование нашего селектора -желаемый эффект щелчка!
Вот:
<FrameLayout
android:id="@+id/imageButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="?android:attr/selectableItemBackground" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/yourImageFile" />
</FrameLayout>
(обратите внимание, это должно быть размещено в макете вашего родителя.)
final View imageButton = findViewById(R.id.imageButton);
imageButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
// do whatever we wish!
}
});