Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android 自定義滑動按鈕,android滑動

android 自定義滑動按鈕,android滑動

編輯:關於android開發

android 自定義滑動按鈕,android滑動


  第一接觸公司項目就讓我畫頁面,而且還涉及到我最討厭的自定義view  但是沒辦法,討厭也必須要做啊,經過百度上資源的查找,終於寫出了一個滑動控件。廢話不多說,上代碼。

 

 

 

package com.etong.cpms.widget;

import com.etong.cpms.activity.R;

import android.content.Context;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.graphics.Canvas;  
import android.graphics.Color;
import android.graphics.Matrix;  
import android.graphics.Paint;  
import android.util.AttributeSet;  
import android.view.MotionEvent;  
import android.view.View;  
import android.view.View.OnTouchListener;

public class WiperSwitch extends View implements OnTouchListener{  
    private Bitmap bg_on, bg_off, slipper_btn;  
    private String mOnText = "打開";
    private String mOffText = "關閉";
    /**
     * 按下時的x和當前的x
     */  
    private float downX, nowX;  
      
    /**
     * 記錄用戶是否在滑動
     */  
    private boolean onSlip = false;  
      
    /**
     * 當前的狀態
     */  
    private boolean nowStatus = false;  
      
    /**
     * 監聽接口
     */  
    private OnChangedListener listener;  
      
      
    public WiperSwitch(Context context) {  
        super(context);  
        init();  
    }  
 
    public WiperSwitch(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        init();  
    }  
      
    public void init(){  
        //載入圖片資源  
        bg_on = BitmapFactory.decodeResource(getResources(), R.drawable.switch_bkg_switch1);  
        bg_off = BitmapFactory.decodeResource(getResources(), R.drawable.switch_bkg_switch1);  
        slipper_btn = BitmapFactory.decodeResource(getResources(), R.drawable.switch_btn_slip1);  
        setOnTouchListener(this);  
    }  
      
    protected void onDraw(Canvas canvas) {  
        super.onDraw(canvas);  
        Matrix matrix = new Matrix();  
        Paint paint = new Paint();  
        float x = 0;  
          
        //根據nowX設置背景,開或者關狀態  
        if (nowX < (bg_on.getWidth()/2)){  
              canvas.drawBitmap(bg_off, matrix, paint);//畫出關閉時的背景
              paint.setColor(Color.WHITE);
              paint.setFakeBoldText(true);
              paint.setTextSize(40);
              canvas.drawText(mOffText, (bg_off.getWidth()-slipper_btn.getWidth())/2, (bg_off.getHeight()+30)/2, paint);
        }else{  
            canvas.drawBitmap(bg_on, matrix, paint);//畫出打開時的背景   
            canvas.drawBitmap(bg_on, matrix, paint);//畫出打開時的背景   
            paint.setColor(Color.WHITE);
            paint.setFakeBoldText(true);
            paint.setTextSize(40);
            canvas.drawText(mOnText,(bg_on.getWidth()-slipper_btn.getWidth())/2, (bg_on.getHeight()+30)/2, paint);
        }  
          
        if (onSlip) {//是否是在滑動狀態,    
            if(nowX >= bg_on.getWidth())//是否劃出指定范圍,不能讓滑塊跑到外頭,必須做這個判斷  
                x = bg_on.getWidth() - slipper_btn.getWidth()/2;//減去滑塊1/2的長度  
            else  
                x = nowX - slipper_btn.getWidth()/2;  
        }else {  
            if(nowStatus){//根據當前的狀態設置滑塊的x值  
                x = bg_on.getWidth() - slipper_btn.getWidth();  
            }else{  
                x = 0;  
            }  
        }  
          
        //對滑塊滑動進行異常處理,不能讓滑塊出界  
        if (x < 0 ){  
            x = 0;  
        }  
        else if(x > bg_on.getWidth() - slipper_btn.getWidth()){  
            x = bg_on.getWidth() - slipper_btn.getWidth();  
        }  
          
        //畫出滑塊  
        canvas.drawBitmap(slipper_btn, x , 0, paint);   
    }  
 
    @Override  
    public boolean onTouch(View v, MotionEvent event) {  
        switch(event.getAction()){  
        case MotionEvent.ACTION_DOWN:{  
            if (event.getX() > bg_off.getWidth() || event.getY() > bg_off.getHeight()){  
                return false;  
            }else{  
                onSlip = true;  
                downX = event.getX();  
                nowX = downX;  
            }  
            break;  
        }  
        case MotionEvent.ACTION_MOVE:{  
            nowX = event.getX();  
            break;  
        }  
        case MotionEvent.ACTION_UP:{  
            onSlip = false;  
            if(event.getX() >= (bg_on.getWidth()/2)){  
                nowStatus = true;  
                nowX = bg_on.getWidth() - slipper_btn.getWidth();  
            }else{  
                nowStatus = false;  
                nowX = 0;  
            }  
              
            if(listener != null){  
                listener.OnChanged(WiperSwitch.this, nowStatus);  
            }  
            break;  
        }  
        }  
        //刷新界面  
        invalidate();  
        return true;  
    }  
      
      
      
    /**
     * 為WiperSwitch設置一個監聽,供外部調用的方法
     * @param listener
     */  
    public void setOnChangedListener(OnChangedListener listener){  
        this.listener = listener;  
    }  
      
    /**
     * 設置滑動開關的初始狀態,供外部調用
     * @param checked
     */  
    public void setChecked(boolean checked){  
        if(checked){  
            nowX = bg_off.getWidth();  
        }else{  
            nowX = 0;
        }  
        nowStatus = checked;  
    }  
    /**
     * 回調接口
     * @author len
     *
     */  
    public interface OnChangedListener {  
        public void OnChanged(WiperSwitch wiperSwitch, boolean checkState);  
    }  
 
 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved