在按下和释放时更改ImageButton的图像

时间:2012-12-29 02:23:33

标签: android xamarin.android

在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
        }
    }

我不确定我是否正在使用正确的活动。在这种情况下应该使用什么事件?

2 个答案:

答案 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();
    }
}