android - 找出当用户按下按钮时,他的手指在 android 中的按钮之外移动
问题描述
假设我有一个注册按钮类:
public class SignUp extends AppCompatButton {
public SignUp(Context context) {
this(context, null);
}
public SignUp(Context context, AttributeSet attrs) {
super(context, attrs, android.support.v7.appcompat.R.attr.buttonStyle);
setFocusable(true);
setFocusableInTouchMode(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
requestFocus();
this.setBackgroundColor(getResources().getColor(R.color.darkGreen));
return true;
case MotionEvent.ACTION_UP:
this.setBackgroundColor(getResources().getColor(R.color.green));
performClick();
return true;
}
return false;
}
@Override
public boolean performClick() {
super.performClick();
return false;
//TODO
}
我的应用程序中有一个名为 signUp 的按钮,我在 XML 文件中声明它是这样的:
<com.example.John.myapplication.SignUp
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="@string/sign_up"
android:background="@color/green"
android:textColor="@color/whiteText"
app:layout_constraintTop_toBottomOf="@+id/verify_password"
android:layout_marginTop="40dp"
app:layout_constraintLeft_toRightOf="parent"
app:layout_constraintRight_toLeftOf="parent"
android:id="@+id/sign_up"
android:textSize="20sp"
/>
现在,如果用户触摸 signUp 按钮,按钮的颜色将变为深绿色,当他释放按钮时,按钮的颜色将再次变为绿色。但我想添加此功能,以便当用户触摸按钮然后将手指拖出按钮时,按钮颜色变为绿色,但我不能。MotionEvent.ACTION_OUTSIDE,MotionEvent.ACTION_CANCEL 和 ... 都不起作用。我应该怎么办?
而且我不想通过协调检查手指是否在按钮之外,因为当按钮是椭圆形时,这是一项巨大的工作。
解决方案
只需使用selector
.
https://developer.android.com/guide/topics/resources/color-list-resource
例子
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@color/colorTextPrimaryDark" />
<item android:color="@color/colorAccent3" />
</selector>
推荐阅读
- python - 如何使用 python 将 UTC 时间转换为 UTC 中的相应日期和时间?
- python - 如何永远运行python代码直到停止它?
- javascript - 使用 Javascript 的文本框中的 Control+N 键事件
- email - SPF 记录不安全的配置
- c# - 无法在 Tizen.NET 可穿戴应用程序中向 tizen-manifest.xml 添加权限
- arduino - GPS模块未使用Arduino显示有用信息
- scala - 使用 Spark UDF 提取 tar.gz 时出现 OutOfMemoryError
- reactjs - 如何用 axios 编写请求体?
- google-apps-script - .clearcontent 不能只处理一个电子表格
- sql-injection - 为什么查询中的雪花变量绑定会抛出表名错误而不是整数?