只要按下按钮,如何更改图像...然后在按钮unpress android上显示默认值

时间:2012-12-27 14:18:11

标签: android android-layout relativelayout

我想在用户按住按钮时更改imageview的图像,并在用户释放按钮时将图像更改回默认值。

5 个答案:

答案 0 :(得分:0)

使用OnFocusChangeListener(view)方法&将OnFocusChange()方法重写为此。

答案 1 :(得分:0)

您需要使用XML选择器。您可以根据需要指定任何可绘制的绘图。

文档在这里:http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html

您将创建一个XML,它引用了您要应用样式的每个状态,然后在将drawable分配给视图(例如按钮)时引用,而不是特定的drawable。 / p>

查看此问题了解详情:Android selector & text color

答案 2 :(得分:0)

您可以将OnTouchListener设置为ImageView,然后在OnTouchListener中设置要在MotionEvent.ACTION_DOWN中显示的图片,并还原MotionEvent.ACTION_UP中的旧图片1}}。

答案 3 :(得分:0)

您可以像这样创建一个自定义Button类

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" />

答案 4 :(得分:-1)

在这篇文章中你可以找到解决方案:

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

小心! ;)