本篇文章带来Android的完全自定义控件。载体是自定义一个开关的控件,并且能够响应事件,首先我们先创一个项目,名字就叫ToggleView,修改MainActivity
public class MainActivity extends Activity {
private ToggleView toggleView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toggleView = (ToggleView) findViewById(R.id.toggleView);
// toggleView.setSwitchBackgroundResource(R.drawable.switch_background);
// toggleView.setSlideButtonResource(R.drawable.slide_button);
// toggleView.setSwitchState(true);
//
// 设置开关更新监听
toggleView.setOnSwitchStateUpdateListener(new ToggleView.OnSwitchStateUpdateListener(){
@Override
public void onStateUpdate(boolean state) {
Toast.makeText(getApplicationContext(), "state: " + state, Toast.LENGTH_SHORT).show();
}
});
}
// @Override
// protected void onResume() {
// super.onResume();
// }
//
}
写一个继承View的自定义控件的类ToggleView
/**
* 自定义开关
* @author poplar
*
* Android 的界面绘制流程
* 测量 摆放 绘制
* measure -> layout -> draw
* | | |
* onMeasure -> onLayout -> onDraw 重写这些方法, 实现自定义控件
*
* onResume()之后执行
*
* View
* onMeasure() (在这个方法里指定自己的宽高) -> onDraw() (绘制自己的内容)
*
* ViewGroup
* onMeasure() (指定自己的宽高, 所有子View的宽高)-> onLayout() (摆放所有子View) -> onDraw() (绘制内容)
*/
public class ToggleView extends View {
private Bitmap switchBackgroupBitmap; // 背景图片
private Bitmap slideButtonBitmap; // 滑块图片
private Paint paint; // 画笔