仿iphone 开关按钮

 

  
  
  
  
  1. import android.content.Context;  
  2. import android.graphics.Bitmap;  
  3. import android.graphics.BitmapFactory;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Matrix;  
  6. import android.graphics.Paint;  
  7. import android.graphics.Rect;  
  8. import android.util.AttributeSet;  
  9. import android.view.MotionEvent;  
  10. import android.view.View;  
  11.  
  12. import com.pubukeji.gamecenter.R;  
  13.  
  14. public class MySlipSwitch extends View  
  15.   implements View.OnTouchListener  
  16. {  
  17.   private long clickTimeMillis = 0L;  
  18.   private float currentX;  
  19.   private boolean isSlipping = false;  
  20.   private boolean isSwitchOn = false;  
  21.   private Rect off_Rect;  
  22.   private OnSwitchListener onSwitchListener;  
  23.   private Rect on_Rect;  
  24.   private float previousX;  
  25.   private Bitmap slip_Btn;  
  26.   private Bitmap switch_off_Bkg;  
  27.   private Bitmap switch_on_Bkg;  
  28.  
  29.   public MySlipSwitch(Context paramContext)  
  30.   {  
  31.     super(paramContext);  
  32.     init();  
  33.   }  
  34.  
  35.  public MySlipSwitch(Context context, AttributeSet attrs) {  
  36.   super(context, attrs);  
  37.   init();  
  38.  }  
  39.  
  40.  public MySlipSwitch(Context context, AttributeSet attrs, int defStyle) {  
  41.   super(context, attrs, defStyle);  
  42.   init();  
  43.  }  
  44.   private void init()  
  45.   {  
  46.   setImageResource(R.drawable.split_left_1, R.drawable.split_right_1,  
  47.     R.drawable.split_1);  
  48.     setOnTouchListener(this);  
  49.   }  
  50.  
  51.   protected boolean getSwitchState()  
  52.   {  
  53.     return this.isSwitchOn;  
  54.   }  
  55.  
  56.   public void onClick()  
  57.   {  
  58.     boolean bool;  
  59.     if (!this.isSwitchOn)  
  60.       bool = true;  
  61.     else 
  62.       bool = false;  
  63.     this.isSwitchOn = bool;  
  64.     if (this.onSwitchListener != null)  
  65.       this.onSwitchListener.onSwitched(thisthis.isSwitchOn);  
  66.     invalidate();  
  67.   }  
  68.  
  69.   protected void onDraw(Canvas paramCanvas)  
  70.   {  
  71.     super.onDraw(paramCanvas);  
  72.     Matrix localMatrix = new Matrix();  
  73.     Paint localPaint = new Paint();  
  74.     if (this.currentX >= this.switch_on_Bkg.getWidth() / 2)  
  75.       paramCanvas.drawBitmap(this.switch_on_Bkg, localMatrix, localPaint);  
  76.     else 
  77.       paramCanvas.drawBitmap(this.switch_off_Bkg, localMatrix, localPaint);  
  78.     float f;  
  79.     if (!this.isSlipping)  
  80.     {  
  81.       if (!this.isSwitchOn)  
  82.       {  
  83.         f = this.off_Rect.left;  
  84.         paramCanvas.drawBitmap(this.switch_off_Bkg, localMatrix, localPaint);  
  85.       }  
  86.       else 
  87.       {  
  88.         f = this.on_Rect.left;  
  89.         paramCanvas.drawBitmap(this.switch_on_Bkg, localMatrix, localPaint);  
  90.       }  
  91.     }  
  92.     else if (this.currentX <= this.switch_on_Bkg.getWidth())  
  93.       f = this.currentX - this.slip_Btn.getWidth() / 2;  
  94.     else 
  95.       f = this.switch_on_Bkg.getWidth() - this.slip_Btn.getWidth();  
  96.     if (f >= 0.0F)  
  97.     {  
  98.       if (f > this.switch_on_Bkg.getWidth() - this.slip_Btn.getWidth())  
  99.         f = this.switch_on_Bkg.getWidth() - this.slip_Btn.getWidth();  
  100.     }  
  101.     else 
  102.       f = 0.0F;  
  103.     paramCanvas.drawBitmap(this.slip_Btn, f, 0.0F, localPaint);  
  104.   }  
  105.  
  106.   protected void onMeasure(int paramInt1, int paramInt2)  
  107.   {  
  108.     setMeasuredDimension(this.switch_on_Bkg.getWidth(), this.switch_on_Bkg.getHeight());  
  109.   }  
  110.  
  111.   public boolean onTouch(View paramView, MotionEvent paramMotionEvent)  
  112.   {  
  113.     boolean bool1 = false;  
  114.     switch (paramMotionEvent.getAction())  
  115.     {  
  116.     case 0:  
  117.       if ((paramMotionEvent.getX() > this.switch_on_Bkg.getWidth()) || (paramMotionEvent.getY() > this.switch_on_Bkg.getHeight()))  
  118.     break;  
  119.       this.isSlipping = true;  
  120.       this.clickTimeMillis = System.currentTimeMillis();  
  121.       this.previousX = paramMotionEvent.getX();  
  122.       this.currentX = this.previousX;  
  123.       break;  
  124.     case 1:  
  125.     case 3:  
  126.       this.isSlipping = bool1;  
  127.       if (System.currentTimeMillis() - this.clickTimeMillis >= 300L)  
  128.       {  
  129.         boolean bool2 = this.isSwitchOn;  
  130.         if (paramMotionEvent.getX() < this.switch_on_Bkg.getWidth() / 2)  
  131.           this.isSwitchOn = bool1;  
  132.         else 
  133.           this.isSwitchOn = true;  
  134.         if ((this.onSwitchListener == null) || (bool2 == this.isSwitchOn))  
  135.           break;  
  136.         this.onSwitchListener.onSwitched(thisthis.isSwitchOn);  
  137.       }  
  138.       else 
  139.       {  
  140.         onClick();  
  141.       }  
  142.       break;  
  143.     case 2:  
  144.       this.currentX = paramMotionEvent.getX();  
  145.     }  
  146.     invalidate();  
  147.     bool1 = true;  
  148.   return bool1;  
  149.   }  
  150.  
  151.   protected void setImageResource(int paramInt1, int paramInt2, int paramInt3)  
  152.   {  
  153.     this.switch_on_Bkg = BitmapFactory.decodeResource(getResources(), paramInt1);  
  154.     this.switch_off_Bkg = BitmapFactory.decodeResource(getResources(), paramInt2);  
  155.     this.slip_Btn = BitmapFactory.decodeResource(getResources(), paramInt3);  
  156.     this.on_Rect = new Rect(this.switch_off_Bkg.getWidth() - this.slip_Btn.getWidth(), 0this.switch_off_Bkg.getWidth(), this.slip_Btn.getHeight());  
  157.     this.off_Rect = new Rect(00this.slip_Btn.getWidth(), this.slip_Btn.getHeight());  
  158.   }  
  159.  
  160.   public void setOnSwitchListener(OnSwitchListener paramOnSwitchListener)  
  161.   {  
  162.     this.onSwitchListener = paramOnSwitchListener;  
  163.   }  
  164.  
  165.  public void setSwitchState(boolean paramBoolean)  
  166.   {  
  167.     this.isSwitchOn = paramBoolean;  
  168.     invalidate();  
  169.   }  
  170.  
  171.   public static abstract interface OnSwitchListener  
  172.   {  
  173.     public abstract void onSwitched(MySlipSwitch paramMySlipSwitch, boolean paramBoolean);  
  174.   }  
  175. }  
  176.  

 

你可能感兴趣的:(按钮,开关,仿iphone)