Android - SwitchButton开关按钮

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28261207/article/details/83030448

工具类 :

package utils;

import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.RelativeLayout;

public class SwitchButtonView extends RelativeLayout {

    public static final int OPEN = 1;
    public static final int CLOSE = 0;

    private int defaultStatus;

    private int currentStatus;
    private OnSwitchListener onSwitchListener;

    private TypedArray typedArray;

    private RelativeLayout relativeLayout;
    private View view;

    public SwitchButtonView(Context context) {
        super(context);
    }

    public SwitchButtonView(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.layout_switch, this);
        typedArray = context.obtainStyledAttributes(attrs, R.styleable.SwitchButton);
        initView();
        init();
    }

    /**
     * 初始化控件
     */
    private void initView() {
        relativeLayout = findViewById(R.id.relative_layout_bg);
        view = findViewById(R.id.view_scroll);
    }

    /**
     * 初始化操作
     */
    private void init() {
        defaultStatus = typedArray.getInt(R.styleable.SwitchButton_defaultStatus, 1);
        if (defaultStatus == 0) {
            relativeLayout.setBackgroundResource(R.drawable.bg_switch_bottom);
            view.setBackgroundResource(R.drawable.bg_switch_top);
            setViewLocation(view, RelativeLayout.ALIGN_PARENT_LEFT);
            currentStatus = CLOSE;
        } else if (defaultStatus == 1) {
            relativeLayout.setBackgroundResource(R.drawable.bg_switch_bottom_open);
            view.setBackgroundResource(R.drawable.bg_switch_top_open);
            setViewLocation(view, RelativeLayout.ALIGN_PARENT_RIGHT);
            currentStatus = OPEN;
        }
    }

    private void setViewLocation(View view, int location) {
        LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
        if (location == RelativeLayout.ALIGN_PARENT_LEFT) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            }
        } else if (location == RelativeLayout.ALIGN_PARENT_RIGHT) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
            }
        }
        layoutParams.addRule(location);
        view.setLayoutParams(layoutParams);
    }

    /**
     * 获取当前的状态
     */
    public int getCurrentStatus() {
        return currentStatus;
    }

    /**
     * 设置状态变化监听
     */
    public void setOnSwitchListener(OnSwitchListener onSwitchListener) {
        this.onSwitchListener = onSwitchListener;
    }

    /**
     * 关闭按钮
     */
    public void closeButton() {
        relativeLayout.setBackgroundResource(R.drawable.bg_switch_bottom);
        view.setBackgroundResource(R.drawable.bg_switch_top);
        setViewLocation(view, RelativeLayout.ALIGN_PARENT_LEFT);
        currentStatus = CLOSE;
    }

    /**
     * 打开按钮
     */
    public void openButton() {
        relativeLayout.setBackgroundResource(R.drawable.bg_switch_bottom_open);
        view.setBackgroundResource(R.drawable.bg_switch_top_open);
        setViewLocation(view, RelativeLayout.ALIGN_PARENT_RIGHT);
        currentStatus = OPEN;
    }

    /**
     * 改变状态
     */
    private void changeStatus() {
        if (currentStatus == OPEN) {
            closeButton();
        } else if (currentStatus == CLOSE) {
            openButton();
        }
        if (onSwitchListener != null) {
            onSwitchListener.onSwitchChange();  //调用监听改变时候处理逻辑的函数
        }
    }

    /**
     * 触摸事件
     * 触摸一下,改变按钮的状态
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                /**
                 * 改变状态
                 */
                changeStatus();
                break;
            default:
                break;
        }
        return super.onTouchEvent(event);
    }

    public interface OnSwitchListener {
        void onSwitchChange();
    }
}

布局里 :

<utils.SwitchButtonView
    android:id="@+id/switch_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    app:defaultStatus="open"/>

Activity中 :

// 打开 : 
switchButton.openButton();
// 关闭 : 
switchButton.closeButton();
// 加监听 : 
switchButton.setOnSwitchListener(new SwitchButtonView.OnSwitchListener() {
    @Override
    public void onSwitchChange() {
        LogUtil.e(TAG, "switchButton.getCurrentStatus() --- " + switchButton.getCurrentStatus());
    }
});
// 1为打开, 0为关闭

猜你喜欢

转载自blog.csdn.net/qq_28261207/article/details/83030448