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 に答える