电气工程及其自动化就业方向,李娜vs埃拉尼,靖州天气
这篇博客要讲的是自定义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); } }
以上便是所有的代码。
请尊重劳动成果,转载请标明出处:http://www.cnblogs.com/tangZH/p/8277428.html
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论