Как я могу дать эффект кнопки в 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", когда пользователь нажимает на представление.

Другие вопросы по тегам