我想在用户按住按钮时更改 imageview 的图像,并在用户释放按钮时将图像更改回默认值。
问问题
162 次
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
您可以将 设置OnTouchListener
为ImageView
和 ,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
于 2013-08-12T20:35:38.570 回答