博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义switchButton
阅读量:6602 次
发布时间:2019-06-24

本文共 4107 字,大约阅读时间需要 13 分钟。

这篇博客要讲的是自定义switchButton,不过没有设置动画效果。

我用GradientDrawable来绘制switchButton,我们先看看最终的效果:

点击前:

点击后

 

接下来我们看看如何实现

首先:该类继承RelativeLayout

SwitchButton extends RelativeLayout{
}

 

该类需要用到的成员:

private ImageView track; //滑块所在的轨道    private ImageView slider; //switchButton上面的滑块    private GradientDrawable trackDrawable; //用于绘制轨道    private GradientDrawable sliderDrawable; //用于绘制滑块    private LayoutParams trackLy; //轨道的布局    private LayoutParams sliderLy; //滑块的布局   private boolean isCkeck = false; //是否点击

 

构造方法:

public SwitchButton(Context context) {        super(context);        init();    }    public SwitchButton(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }

 

private void init(){        setClickable(true);        setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,              ViewGroup.LayoutParams.WRAP_CONTENT));        track = new ImageView(getContext());        slider = new ImageView(getContext());        trackLy = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,              ViewGroup.LayoutParams.WRAP_CONTENT);        trackLy.addRule(CENTER_VERTICAL);        sliderLy = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,              ViewGroup.LayoutParams.WRAP_CONTENT);        sliderLy.addRule(CENTER_VERTICAL);        track.setLayoutParams(trackLy);        slider.setLayoutParams(sliderLy);        trackDrawable = new GradientDrawable();        sliderDrawable = new GradientDrawable(); //轨道的形状,颜色,大小,边缘,角度        trackDrawable.setShape(GradientDrawable.RECTANGLE);         trackDrawable.setColor(getResources().getColor(R.color.white_FFFFFFFF));        trackDrawable.setSize(getResources()                 .getDimensionPixelOffset(R.dimen.track_width),                getResources().getDimensionPixelOffset(R.dimen.track_height));        trackDrawable.setStroke(getResources()                 .getDimensionPixelOffset(R.dimen.switch_button_stroke),                getResources().getColor(R.color.gray));        trackDrawable.setCornerRadius(getResources()                 .getDimension(R.dimen.switch_button_cornerRadius)); //设置滑块的形状,颜色,大小,边缘,角度        sliderDrawable.setShape(GradientDrawable.OVAL);        sliderDrawable.setColor(getResources().getColor(R.color.white_FFFFFFFF));        sliderDrawable.setSize(getResources()                 .getDimensionPixelOffset(R.dimen.slider_size),                getResources().getDimensionPixelOffset(R.dimen.slider_size));        sliderDrawable.setStroke(getResources()                 .getDimensionPixelOffset(R.dimen.switch_button_stroke),                getResources().getColor(R.color.gray));        //设置给imageView        track.setImageDrawable(trackDrawable);        slider.setImageDrawable(sliderDrawable);        addView(track);        addView(slider);        setOnClickListener(this);    }

 

设置点击事件

@Override    public void onClick(View view) {        if (isCkeck)        {            isCkeck = false;        }else {            isCkeck = true;        }        setCheck(isCkeck);    }
private void setCheck(boolean isCheck){        if (isCheck){
//轨道变为蓝色 trackDrawable.setColor(getResources().getColor(R.color.blue)); //注意这里进行版本判断。if与else里面代码的效果是相同的,只是有些代码在某些版本下才能够用 if (Build.VERSION.SDK_INT >= 17) { sliderLy.addRule(ALIGN_PARENT_END); //设置新的布局之前,要先移除之前的布局,否则会有叠加的效果 sliderLy.removeRule(ALIGN_PARENT_START); } else { sliderLy.addRule(ALIGN_PARENT_RIGHT); sliderLy.addRule(ALIGN_PARENT_LEFT,0); } slider.setLayoutParams(sliderLy); }else { trackDrawable.setColor(getResources().getColor(R.color.white_FFFFFFFF)); if (Build.VERSION.SDK_INT >= 17) { sliderLy.removeRule(ALIGN_PARENT_END); sliderLy.addRule(ALIGN_PARENT_START); } else { sliderLy.addRule(ALIGN_PARENT_RIGHT,0); sliderLy.addRule(ALIGN_PARENT_LEFT); } slider.setLayoutParams(sliderLy); } }

 以上便是所有的代码。

请尊重劳动成果,转载请标明出处:

 

转载于:https://www.cnblogs.com/tangZH/p/8277428.html

你可能感兴趣的文章
Lync 小技巧-38-Lync Server 2013与Exchange Server高可用环境-集成
查看>>
02-准备实验环境-001-安装 VMware Workstation 15
查看>>
linux系统下源码安装Apache2.4
查看>>
SHA1算法升级SHA256更新计划
查看>>
Patch OpenSSL使其支持CHACH20_POLY1305加密算法
查看>>
VM虚拟机安装win7
查看>>
VMWare vShere/ESX硬盘的后置备与精简配置之间的转换
查看>>
time_wait和close_wait产生原因及解决
查看>>
python核心编程 -chapter 13
查看>>
业主关心的问题,监理干了什么,监理单位具体回答
查看>>
Ubuntu安装bbr教程
查看>>
我的友情链接
查看>>
linux批量替换文件内容3种方法(perl,sed,shell)
查看>>
Operations Manager 2012 SP1配置部署系列之(一) 单服务器的部署
查看>>
binder 驱动
查看>>
nginx tcp代理
查看>>
tomcat Native APR安装
查看>>
谢烟客---------Linux之总结Linux基础
查看>>
状态栏和导航栏设置备忘
查看>>
centos6下安装node-zk-browser
查看>>