你的位置:首页 > 操作系统

[操作系统]Android自定义控件7


本文实现全自定义控件--自定义开关

本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址。

自定义开关 (View),本文完成下面内容

1. 写个类继承View
2. 拷贝包含包名的全路径到3. 界面中找到该控件, 设置初始信息
4. 根据需求绘制界面内容

Android 的界面绘制流程: 
 测量----------> 摆放 -------->绘制
 measure ----->layout ---->draw
    |                      |                 |
 onMeasure--->OnLayout-->onDraw

新建类ToggleView,继承自View

package com.wuyudong.toggleview.ui;import android.content.Context;import android.util.AttributeSet;import android.view.View;/** * 自定义开关 * * @author wuyudong * */public class ToggleView extends View {  /**   * 用于代码创建控件   *   * @param context   */  public ToggleView(Context context) {    super(context);    // TODO Auto-generated constructor stub  }  /**   * 用于在@param context   * @param attrs   */  public ToggleView(Context context, AttributeSet attrs) {    super(context, attrs);    // TODO Auto-generated constructor stub  }  /**   * 用于在@param context   * @param attrs   * @param defStyle   */  public ToggleView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    // TODO Auto-generated constructor stub  }  /**   * 设置背景图   *   * @param switchBackground   */  public void setSwitchBackgroundResource(int switchBackground) {  }  /**   * 设置滑块图片资源   *   * @param slideButton   */  public void setSlideButtonResource(int slideButton) {  }  /**   * 设置开关状态   *   * @param b   */  public void setSwitchState(boolean b) {  }}

布局如下:

<RelativeLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  tools:context=".MainActivity" >  <com.wuyudong.toggleview.ui.ToggleView    android:id="@+id/toggleView"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerInParent="true" /></RelativeLayout>

接着将画布进行填充,设置开关状态

package com.wuyudong.toggleview.ui;import com.wuyudong.toggleview.R;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;/** * 自定义开关 * * @author wuyudong * */public class ToggleView extends View {  private Bitmap switchBackgroundBitmap;  private Bitmap slideButtonBitmap;  private boolean mSwitchState = false; //开关状态,默认关闭  /**   * 用于代码创建控件   *   * @param context   */  public ToggleView(Context context) {    super(context);    // TODO Auto-generated constructor stub  }  /**   * 用于在@param context   * @param attrs   */  public ToggleView(Context context, AttributeSet attrs) {    super(context, attrs);    // TODO Auto-generated constructor stub  }  /**   * 用于在@param context   * @param attrs   * @param defStyle   */  public ToggleView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);  }  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    setMeasuredDimension(switchBackgroundBitmap.getWidth(),        switchBackgroundBitmap.getHeight());  }    /**   * Canvas: 画布,画板,在上面绘制的内容都会显示在界面上   */  @Override  protected void onDraw(Canvas canvas) {//1、绘制背景    Paint paint = new Paint();    canvas.drawBitmap(switchBackgroundBitmap, 0, 0, paint);    //2、绘制滑块    //根据开关状态,直接设置图片位置    if(mSwitchState) {      int newLeft = switchBackgroundBitmap.getWidth() - slideButtonBitmap.getWidth();      canvas.drawBitmap(slideButtonBitmap, newLeft, 0, paint);    } else {      canvas.drawBitmap(slideButtonBitmap, 0, 0, paint);    }      }  /**   * 设置背景图   *   * @param switchBackground   */  public void setSwitchBackgroundResource(int switchBackground) {    switchBackgroundBitmap = BitmapFactory.decodeResource(getResources(),        switchBackground);  }  /**   * 设置滑块图片资源   *   * @param slideButton   */  public void setSlideButtonResource(int slideButton) {    slideButtonBitmap = BitmapFactory.decodeResource(getResources(),        slideButton);  }  /**   * 设置开关状态   *   * @param b   */  public void setSwitchState(boolean mSwitchState) {    this.mSwitchState = mSwitchState;      }}