1

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

我不确定我是否在正确的事件中这样做。在这种情况下通常应该使用什么事件?

4

2 回答 2

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"/>
于 2012-12-29T03:07:39.107 回答
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();
    }
}
于 2012-12-29T15:00:19.780 回答