0

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

4

5 回答 5

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

您可以将 设置OnTouchListenerImageView和 ,OnTouchListener您可以设置要在其中显示的图像并在 中MotionEvent.ACTION_DOWN恢复旧图像MotionEvent.ACTION_UP

于 2012-12-27T14:29:26.123 回答
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" />
于 2012-12-27T14:39:58.893 回答
-1

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

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

小心!;)

于 2013-08-12T20:35:38.570 回答