由于许多原因,我不得不将ImageView定义为按钮,因为它看起来更好。但是当我点击它时没有按钮的效果,我该怎么做?
答案 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”。