触摸按钮但指针不在按钮外时如何设置填充?
How set Padding when an button is touched but the pointer is out of my button?
我使用 XML 文件来显示具有 2 种状态(正常、按下)的按钮。我怎么能够
找出何时触摸按钮但光标不在?
我想要这样的按钮效果
按钮not触摸
按钮touched
按钮被触摸但是finger hasn't been lifted
这是我使用的 XML 文件:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_press" />
<item android:drawable="@drawable/button_nopress" />
</selector>
这是我的 Java class:
button = findViewById(R.id.b1);
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
button.setPadding(0, 55, 0, 0);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
button.setPadding(0, 0, 0, 0);
}
return false;
}
});
这是我的按钮和我的代码:
按钮被触摸但是finger hasn't been lifted
看下面的代码。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed"
android:state_pressed="true" />
<item android:drawable="@drawable/button_focused"
android:state_focused="true" />
<item android:drawable="@drawable/button_default" />
</selector>
属性 state_pressed 或 state_focused 应该可以完成这项工作。
请参阅以下 link 以获得更多指导
更新
我可以用这个代码来做:
private Rect rect; // Variable rect to hold the bounds of the view
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
// Construct a rect of the view's bounds
rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
if(!rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + (int) event.getY())){
// User moved outside bounds
}
}
return false;
}
我使用 XML 文件来显示具有 2 种状态(正常、按下)的按钮。我怎么能够 找出何时触摸按钮但光标不在?
我想要这样的按钮效果
按钮not触摸
按钮touched
按钮被触摸但是finger hasn't been lifted
这是我使用的 XML 文件:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_press" />
<item android:drawable="@drawable/button_nopress" />
</selector>
这是我的 Java class:
button = findViewById(R.id.b1);
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
button.setPadding(0, 55, 0, 0);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
button.setPadding(0, 0, 0, 0);
}
return false;
}
});
这是我的按钮和我的代码:
按钮被触摸但是finger hasn't been lifted
看下面的代码。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed"
android:state_pressed="true" />
<item android:drawable="@drawable/button_focused"
android:state_focused="true" />
<item android:drawable="@drawable/button_default" />
</selector>
属性 state_pressed 或 state_focused 应该可以完成这项工作。 请参阅以下 link 以获得更多指导
更新
我可以用这个代码来做:
private Rect rect; // Variable rect to hold the bounds of the view
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
// Construct a rect of the view's bounds
rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
if(!rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + (int) event.getY())){
// User moved outside bounds
}
}
return false;
}