自定义view
public class cusbutton extends View{ private Bitmap slide_button; private Bitmap button_background; private boolean state; private int courrent; private boolean isSliding; OnButtonChange onButtonChange; public cusbutton(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(button_background, 0, 0, null); int onleft = button_background.getWidth() - slide_button.getWidth(); if (isSliding) { int left = courrent - slide_button.getWidth() / 2; if (left < 0) { left = 0; } else if (left > onleft) { left = onleft; } canvas.drawBitmap(slide_button, left, 0, null); } else { if (state) { canvas.drawBitmap(slide_button, onleft, 0, null); } else { canvas.drawBitmap(slide_button, 0, 0, null); } } } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: isSliding = false; courrent = (int) event.getX(); break; case MotionEvent.ACTION_MOVE: courrent = (int) event.getX(); break; case MotionEvent.ACTION_UP: isSliding = true; courrent = (int) event.getX(); boolean flag=courrent>button_background.getWidth()/2; if (flag != state&&onButtonChange!=null) { onButtonChange.OnButtonstate(flag); } if (courrent<button_background.getWidth()/2){ state=false; }else { state=true; } break; } invalidate(); return true; } public void setstate(boolean b) { state = b; } public void setButtonBackGround(int switch_background) { button_background = BitmapFactory.decodeResource(getResources(), switch_background); } public void setButtonSliding(int slide_button_background) { slide_button = BitmapFactory.decodeResource(getResources(), slide_button_background); } public void setOnButtonChange(OnButtonChange ButtonChange) { onButtonChange = ButtonChange; } }
接口
public interface OnBtnChange { void OnBtnState(boolean state); }主类
public class MainActivity extends AppCompatActivity { private cusbutton myButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myButton = findViewById(R.id.myButton); myButton.setstate(false); myButton.setButtonBackGround(R.drawable.switch_background); myButton.setButtonSliding(R.drawable.slide_button_background); myButton.setOnButtonChange(new OnButtonChange() { @Override public void OnButtonstate(boolean state) { if (state){ Toast.makeText(MainActivity.this,"开关已开",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this,"开关已关",Toast.LENGTH_SHORT).show(); } } }); } }