Android自定義View——滑動按鈕 (一)


需要繼承 View 或 ViewGroup

需要了解自定義的類中,需實現三種方法(在MainActivity的onResume方法之后進行的)

/**
 *   測量             擺放            繪制
 *  measure    ->   layout    ->    draw
 *  onMeasure      onLayout         onDraw
 *
 *  View
 *  onMeasure(指定自己寬高)   onDraw 繪制自己內容
 *
 *  ViewGroup
 *  onMeasure(指定自己寬高,所有子View寬高)  onLayout(擺放所有子View)  onDraw 繪制內容
 *
 */

預先准備兩張圖片

1)新建ToggleView類,繼承 android.view.View

public class ToggleView extends View {

    /**
     * 用於代碼創建
     */
    public ToggleView(Context context) {
        super(context);
    }

    /**
     * 用於xml創建,可指定自定義屬性
     */
    public ToggleView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 用於xml創建,可指定自定義屬性.(如果指定了樣式)
     */
    public ToggleView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

2)在MainActivity的layout:activity_main中加入自定義View

<com.f.customeview.Custome.ToggleView
        android:id="@+id/toggleBtn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">
</com.f.customeview.Custome.ToggleView>

3)預想自定義的滑動按鈕需要哪些方式進行屬性設定,假設現在MainActivity自定義幾個方法:

private ToggleView toggle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toggle = findViewById(R.id.toggleBtn);

        toggle.setSwitchBackgroundResource(R.drawable.switch_bg);//設置按鈕背景
        toggle.setSlideButtonResource(R.drawable.toggle);//設置滑動的圖片
        toggle.setSwitchState(false);//設置按鈕的狀態
    }

在ToggleView

public void setSwitchBackgroundResource(int background){
        toggleBackgroundBitmap = BitmapFactory.decodeResource(getResources(),background);

    }
    public void setSlideButtonResource(int slideButton){
        slideButtonBitmap = BitmapFactory.decodeResource(getResources(),slideButton);
        
    }

    public void setSwitchState(boolean mSwitchState) {
    this.mSwitchState = mSwitchState;
}

通過  onMeasure  onDraw方法進行繪制

    private Bitmap toggleBackgroundBitmap;
    private Bitmap slideButtonBitmap;
    private Paint paint;
private boolean mSwitchState;
/**
     * 用於代碼創建
     */
    public ToggleView(Context context) {
        super(context);
        init();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(toggleBackgroundBitmap.getWidth(),toggleBackgroundBitmap.getHeight());

    }

    private void init() {
        paint = new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
    // 1、繪制背景
    canvas.drawBitmap(toggleBackgroundBitmap,0,0,paint);
    // 2、繪制滑塊
    if(mSwitchState){
    int newLeft = toggleBackgroundBitmap.getWidth() - slideButtonBitmap.getWidth();
    canvas.drawBitmap(slideButtonBitmap,newLeft,0,paint);
    }else {
    canvas.drawBitmap(slideButtonBitmap,0,0,paint);
    }
  }

到這里只要改變setSwitchState運行程序,就可以顯示出自定義的滑動按鈕開關狀態了

  

本文只通過設置bool值改變滑動塊圖片位置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM