自定义开关

自定义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();
                }
            }
        });
    }
}


猜你喜欢

转载自blog.csdn.net/xude01/article/details/79551352