我在Android应用中创建了一个自定义按钮,基本上有两种不同的视图。没有按下按钮的图像和按下按钮时使用的另一个图像。下面是我如何实现按钮以及它如何响应用户。
private void registerListeners() {
calcButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
calcButton.requestFocusFromTouch();
calcButton.setImageResource(R.drawable.calc_button_pressed);
return false;
}
});
calcButton.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
calcButton.setImageResource(R.drawable.calc_button_not_pressed);
}
});
calcButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mathCalculation();
calcButton.setImageResource(R.drawable.calc_button_not_pressed);
}
});
}
我的问题是存在一个“错误”,如果用户触摸按钮并将按钮拖离按钮,按钮保持按下状态。我在上面实现的一个解决方法是“setOnFocusChangeListener”,所以一旦用户选择了其它内容,它就会重新弹出。
我想拥有它,以便当用户拖动触摸按钮时,按钮弹出。
非常感谢所有建议!!!
谢谢,
答案 0 :(得分:4)
您不需要编写单独的按钮类来获取该行为,您可以通过可绘制的xml实现它。在xml中有这个并将其设置为按钮的背景:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/calc_button_pressed" />
<item android:drawable="@drawable/calc_button_not_pressed" />
</selector>
答案 1 :(得分:3)
在onTouch方法中,检查事件操作。
calcButton.setImageResource(R.drawable.calc_button_not_pressed);
http://developer.android.com/reference/android/view/MotionEvent.html
答案 2 :(得分:1)
您可以使用onTouch
。然后使用当用户触摸移出视图边界时触发的ACTION_OUTSIDE
。
编辑1:更具体:
OnTouchListener(MotionEvent e) {
switch(e.getAction()) {
case MotionEvent.ACTION_OUTSIDE: // switch the image if the button
}
}
答案 3 :(得分:1)
这是因为点击事件仅在触摸和释放时“发生”。如果你正在触摸并向外移动而不是点击。
为了做你想做的事情,使用StateListDrawable,就是为此而做的。