0

ユーザーがボタンを押しているときにイメージビューの画像を変更し、ユーザーがボタンを離したときに画像をデフォルトに戻したいです。

4

5 に答える 5

0

このようなカスタム ボタン クラスを作成できます。

public class MButton extends Button {
    public MButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

    public MButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub

    }

    public MButton(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    // define style
    /**
     * Send resource ids for normal, selected, pressed in respective order
     * 
     * @param mImageIds
     */
    public void setDrawablePressedBg(Integer... mImageIds) {
        StateListDrawable bg = new StateListDrawable();
        Drawable normal = this.getResources().getDrawable(mImageIds[0]);
        Drawable selected = this.getResources().getDrawable(mImageIds[1]);
        Drawable pressed = this.getResources().getDrawable(mImageIds[2]);

        bg.addState(View.PRESSED_ENABLED_STATE_SET, pressed);
        bg.addState(View.ENABLED_FOCUSED_STATE_SET, selected);
        bg.addState(View.ENABLED_STATE_SET, normal);
        bg.addState(View.FOCUSED_STATE_SET, selected);
        bg.addState(View.EMPTY_STATE_SET, normal);
        this.setBackgroundDrawable(bg);
    }

    // define style
    public void setBackgroundPressedBg(Integer p1, Integer p2, Integer p3) {

        StateListDrawable bg = new StateListDrawable();
        Drawable normal = this.getResources().getDrawable(p1);
        Drawable selected = this.getResources().getDrawable(p2);
        Drawable pressed = this.getResources().getDrawable(p3);

        bg.addState(View.PRESSED_ENABLED_STATE_SET, pressed);
        bg.addState(View.ENABLED_FOCUSED_STATE_SET, selected);
        bg.addState(View.ENABLED_STATE_SET, normal);
        bg.addState(View.FOCUSED_STATE_SET, selected);
        bg.addState(View.EMPTY_STATE_SET, normal);
        this.setBackgroundDrawable(bg);
    }
}

そして、onCreateメソッドでこのように使用できます

this.book_appointment = (MButton) this._view
                .findViewById(R.id.btn_book);

        this.book_appointment.setBackgroundPressedBg(R.drawable.btnnormal,
                R.drawable.btnsel, R.drawable.btnsel);

これは、xmlレイアウトファイルで次のようになります

 <com.packageName.custom.MButton
        android:id="@+id/btn_book"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_time1"
        android:layout_marginTop="20dp"
        android:background="@drawable/bookapointment" />
于 2012-12-27T14:39:58.893 に答える
0

OnFocusChangeListener(view) メソッドを使用して、これに OnFocusChange() メソッドをオーバーライドします。

于 2012-12-27T14:22:36.683 に答える
0

これには XML セレクターを使用する必要があります。必要な状態に必要なドローアブルを指定できます。

ドキュメントはこちら: http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html

スタイルを適用する各状態への参照を持つ XML を作成し、特定のドローアブルの代わりにビュー (ボタンなど) にドローアブルを割り当てるときに参照します。

詳細については、この SO の質問を確認してください: Android セレクターとテキストの色

于 2012-12-27T14:24:10.647 に答える
0

に を設定OnTouchListenerし、ImageViewOnTouchListener表示したい画像を設定しMotionEvent.ACTION_DOWN、 で古い画像を元に戻すことができますMotionEvent.ACTION_UP

于 2012-12-27T14:29:26.123 に答える
-1

この投稿では、解決策を見つけることができます。

https://stackoverflow.com/a/18196156/2000517

気をつけて!;)

于 2013-08-12T20:35:38.570 に答える