自訂switchButton,

來源:互聯網
上載者:User

自訂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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.