单击时如何将按钮的效果赋予ImageView?

时间:2014-01-23 21:44:48

标签: android imageview android-button

由于许多原因,我不得不将ImageView定义为按钮,因为它看起来更好。但是当我点击它时没有按钮的效果,我该怎么做?

3 个答案:

答案 0 :(得分:5)

您可以将selector设置为背景,但是使用ImageButton要好得多,因为它本质上是设计的。

这里是FYI 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>

答案 1 :(得分:5)

几天前我有同样的要求。以下是动画振动的解决方案。

在资源文件中,创建2个文件:    RES /动画/的 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" />

答案 2 :(得分:2)

如果您想要向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”。