首页 > 解决方案 > 找出当用户按下按钮时,他的手指在 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 和 ... 都不起作用。我应该怎么办?

而且我不想通过协调检查手指是否在按钮之外,因为当按钮是椭圆形时,这是一项巨大的工作。

标签: androidmotionevent

解决方案


只需使用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>

推荐阅读