Как я могу дать эффект кнопки в ImageView при нажатии?
По многим причинам мне пришлось определить ImageView как кнопку, потому что она выглядит лучше. Но когда я нажимаю на нее, эффект кнопки не срабатывает. Как мне это сделать?
3 ответа
Вы можете установить selector
в качестве фона, однако, гораздо лучше использовать ImageButton
так как это было в основном дизайн, чтобы сделать это.
К вашему сведению, это определение стиля ImageButton
<style name="Widget.ImageButton">
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:scaleType">center</item>
<item name="android:background">@android:drawable/btn_default</item>
</style>
У меня была такая же просьба пару дней назад. Вот мое решение с анимацией и вибрацией.
В файлах ресурсов создайте 2 файла: res / anim /anim_scale_down.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillAfter="true"
android:fillEnabled="true">
<scale
android:fromXScale="1"
android:toXScale="0.95"
android:fromYScale="1"
android:toYScale="0.95"
android:pivotX="50%"
android:pivotY="50%"
android:duration="100"
/>
</set>
и res / anim /anim_scale_up.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<scale
android:fromXScale="0.95"
android:toXScale="1"
android:fromYScale="0.95"
android:toYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:duration="50"
/>
</set>
В своей деятельности объявите 2 анимации как участников:
private Animation _animUp;
private Animation _animDown;
В onCreate
Установите участников с ресурсами анимации:
_animDown = AnimationUtils.loadAnimation(_context, R.anim.anim_scale_down);
_animUp = AnimationUtils.loadAnimation(_context, R.anim.anim_scale_up);
затем объявите onTouchListener:
private View.OnTouchListener _animListener = new View.OnTouchListener()
{
@Override
public boolean onTouch(final View view, MotionEvent event) {
switch(event.getAction()) {
case (android.view.MotionEvent.ACTION_DOWN) :
view.startAnimation(_animDown);
Vibrator v = (Vibrator)_context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(25);
return false;
case (android.view.MotionEvent.ACTION_UP):
view.startAnimation(_animUp);
return false;
case (android.view.MotionEvent.ACTION_CANCEL) :
view.startAnimation(_animUp);
}
return false;
}
};
Установите touchListener для вашей кнопки:
myButton.setOnTouchListener(_animListener);
Не забудьте установить разрешение вибрации в вашем манифесте:
<uses-permission android:name="android.permission.VIBRATE" />
Если вы хотите добавить "нажатое" визуальное состояние к ImageView
, использовать selector
как рисовать
В папке drawables создайте новый XML-файл следующим образом:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@drawable/myDrawable" />
<item android:state_pressed="true" android:drawable="@drawable/myPressedDrawable" />
</selector>
Если установить в качестве источника изображения вышеупомянутый объект drawable, в качестве изображения по умолчанию будет отображаться "myDrawable" и "myPressedDrawable", когда пользователь нажимает на представление.