在Mono中对于Android,我有一个ImageButton,我想在用户按住按钮时更改其图像。当用户释放按钮图像时,应更改为前一个图像。我正在尝试使用下面的代码,但没有任何反应:
private void _goForward_KeyPress(object sender, View.KeyEventArgs e)
{
if(e.Event.Action == KeyEventActions.Down)
{
_goForward.SetImageResource(Resource.Drawable.arrowUpGreen);
//Then do some stuff
}
else
{
_goForward.SetImageResource(Resource.Drawable.arrowUpRed);
//Then do some stuff
}
}
我不确定我是否正在使用正确的活动。在这种情况下应该使用什么事件?
答案 0 :(得分:5)
试试这个:
使用此选项
将其名称称为:background_drawable.xml
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/YOUR_IMAGE_WHEN_PRESSED"
android:state_pressed="true" />
<item
android:drawable="@drawable/YOUR_IMAGE_WHEN_FOCUSED"
android:state_focused="true" />
<item
android:drawable="@drawable/YOUR_IMAGE_WHEN_NOT_ENABLED"
android:state_enabled="false"
/>
<item
android:drawable="@drawable/DEFAULT_IMAGE_WHICH_YOU_WANT_ALWAYS" />
</selector>
在你的main.xml文件中
<ImageButton
android:background="@drawable/background_drawable"/>
答案 1 :(得分:1)
您需要将方法附加到按钮的KeyPress
事件中才能调用它,因为布线不会自动发生:
_goForward.KeyPress += _goForward_KeyPress;
修改强>
哎呀,我应该第一次更仔细地阅读这个问题。由于您在触摸按钮时尝试挂钩,因此您需要Touch
事件:
_goForward.Touch += _goForward_Touch;
和
private void _goForward_Touch(object sender, View.TouchEventArgs touchEventArgs)
{
if (touchEventArgs.Event.Action == MotionEventActions.Down)
{
Toast.MakeText(this, "down", ToastLength.Short).Show();
}
else
{
Toast.MakeText(this, "up", ToastLength.Short).Show();
}
}