可滑動的ToggleButton(開關)

來源:互聯網
上載者:User

2013-12-28 17:25:01

網上看到一篇關於可滑動的ToogleButton的文章,有代碼,覺得挺好,但是不符合我的要求,因此在他的代碼基礎上改了一些。(作者看到了勿噴啊,實在找不到原文了,只好把代碼貼出來。)

源碼: http://download.csdn.net/detail/zshq280017423/4240703

先來兩張:

然後上代碼:

最主要的類是SlipButton.java

                          DownX, NowX;       btn_on_left =        btn_off_left =        boolean NowChoose = ;           boolean OnSlip = ;      boolean isChgLsnOn =                                                init() {          bg_on =          bg_off =          slip_btn =           btn_off_left = bg_off.getWidth() -          setOnTouchListener();           onDraw(Canvas canvas) {           Matrix matrix =          Paint paint =                     (NowX < (bg_on.getWidth() / )) {              x = NowX - slip_btn.getWidth() /              canvas.drawBitmap(bg_off, matrix, paint);         }              x = bg_on.getWidth() - slip_btn.getWidth() /              canvas.drawBitmap(bg_on, matrix, paint);            (OnSlip) {              (NowX >= bg_on.getWidth()) {                 x = bg_on.getWidth() - slip_btn.getWidth() / ;             }   (NowX <                  x =              }                  x = NowX - slip_btn.getWidth() /           }  {              (NowChoose) {                 x =                 canvas.drawBitmap(bg_on, matrix, paint);             }                  x =                         x =             isChecked = !            (x < ) {             x =          }   (x > bg_on.getWidth() -             x = bg_on.getWidth() -          canvas.drawBitmap(slip_btn, x, , paint);         boolean onTouch(View v, MotionEvent           (.getAction()) {              MotionEvent.ACTION_DOWN:                  (.getX() >                         || .getY() >                                        OnSlip =                  DownX =                  NowX =                                MotionEvent.ACTION_MOVE:                 Log.d(,  +                  Log.d(,  +                  NowX =                  boolean LastChoose =                   (NowX >= (bg_on.getWidth() /                      NowChoose =                  }                      NowChoose =                     (isChgLsnOn && (LastChoose != NowChoose)) {                                   MotionEvent.ACTION_UP:                 OnSlip =                                         invalidate();                   SetOnChangedListener(OnChangedListener l) {         isChgLsnOn =          ChgLsn =                                   .isChecked =         NowChoose =          onMeasure( widthMeasureSpec,            measuredHeight =          measuredWidth =          measureHeight(                                            measureWidth(                                   }

代碼比較簡單,而且注釋比較詳細。

說一些幾個問題:

1. onTouch()方法中得到的event.getX()和event.getY()是什麼值?取值範圍是多少?

    剛開始我以為不管咱們的SlipButton放在什麼位置,得到的event.getX()值因該是相對螢幕的座標值,~~其實是錯誤的,event.getX()只有你的觸摸點在當前SlipButton view的布局範圍之內才會取到值的。但是值的範圍可不僅僅是你的SlipButton view的大小哦,因為一旦你的觸摸點在view範圍之內觸摸到,那麼觸摸點就可以移到View之外的任何地方了,所以取值範圍應該是全屏哦,因此我們在代碼裡做了如下判斷:

  (.getX() >              || .getY() >        }

2. measureWidth()和measureHeight()為什麼會返回一個固定值?

    首先根據用途,我們自訂的SlipButton View根本沒有必要去有調用者調整大小,因為這個ToggleButton本身就是起到開關作用的,應該在應用中是一致的,所以我讓這兩個方法返回固定值。關於onMeasure()方法根詳細的描述,請看我的另一篇文章:http://www.cnblogs.com/wlrhnh/p/3479928.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.