安卓自定义switch,不再使用安卓自带switch。

本文介绍如何自定义Android Switch,以解决原生Switch在不同设备上显示效果不一致及在华为手机上无法监听点击事件的问题。通过自绘View实现,提供带有滚动效果的Switch,并提供源码及使用方法,支持自定义属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓自带的switch可自定义性太差。而且在不同手机上显示效果可能不同。我就遇到再4.4上是长方形方块,在5.0上是圆弧形。

而且经测试switch再华为手机无法监听点击事件,应该是华为手机bug。未深入研究,深受安卓自带switch苦的我自定义View绘制了一个switch.

下面放效果图

点击带有滚动效果。需要的同学可以拿去。

下面放上源码。转载请注明出处:

 
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
import com.airainbow.secret_expert.R;
import com.airainbow.secret_expert.timer.BaseTimer;

/**
 * 编写 :易魏。
 * 日期:20180414
 * 功能 自定义switch
 * Created by Administrator on 2018/4/14.
 */
public class MySwitch extends View {
    private int checkColor;//背景选中颜色
    private int noCheckColor;//背景未选中颜色
    private int circleColor;//圆选中的颜色
    private boolean isCheck;//是否勾选
    private float outLineWidth;//外围描边宽度
    private int outLineColor;//外围描边颜色
    private int circleColorFalse;//圆未选中颜色
    private int checkColorDefault = 0xffff4081;//粉色 ARGB
    private int circleColorDefault = 0xffffffff;//白色
    private int circleColorFalseDefault=0xffff4081;
    private int noCheckColorDefault = 0xffffffff;//白色
    private float outLineWidthDefault = 2;
    private int outLineColorDefault = 0x74747400;
    private boolean isCheckDefault = false;
    private Path outPath = new Path();
    private Paint outPaint = new Paint();
    private Path inPath = new Path();
    private Paint inPaint = new Paint();
    private Paint circlePaint = new Paint();
    private int circleCenter = 0;
    private int width, height;
    private ChangeSwitchStatus changeSwitchStatus = new ChangeSwitchStatus();
    private SwitchOnClickListener switchOnClickListener;

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

    public MySwitch(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MySwitch)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值