• 自定义switchButton


    这篇博客要讲的是自定义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

  • 相关阅读:
    -1%256的值是多少?
    Glut,程序的基本架构
    剑指offer:数值的整数次方
    剑指offer:二进制中1的个数
    剑指offer:斐波那契数列的应用
    剑指offer:斐波那契数列
    剑指offer:旋转数组中的最小数字
    弱智的grub消除法
    POJ 3126 Prime Path
    HDU 1426 Sudoku Killer
  • 原文地址:https://www.cnblogs.com/tangZH/p/8277428.html
Copyright © 2020-2023  润新知