Android自定义控件7--自定义开关--绘制界面内容
2016-09-30 15:20
399 查看
本文实现全自定义控件--自定义开关
本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址。
自定义开关 (View),本文完成下面内容
1. 写个类继承View
2. 拷贝包含包名的全路径到xml中
3. 界面中找到该控件, 设置初始信息
4. 根据需求绘制界面内容
Android 的界面绘制流程:
测量----------> 摆放 -------->绘制
measure ----->layout ---->draw
| | |
onMeasure--->OnLayout-->onDraw
新建类ToggleView,继承自View
布局如下:
接着将画布进行填充,设置开关状态
本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址。
自定义开关 (View),本文完成下面内容
1. 写个类继承View
2. 拷贝包含包名的全路径到xml中
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 } /** * 用于在xml里使用,可指定自定义属性 * * @param context * @param attrs */ public ToggleView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } /** * 用于在xml里使用,可指定自定义属性,如果指定了样式,则走此构造函数 * * @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 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="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 } /** * 用于在xml里使用,可指定自定义属性 * * @param context * @param attrs */ public ToggleView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } /** * 用于在xml里使用,可指定自定义属性,如果指定了样式,则走此构造函数 * * @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; } }
相关文章推荐
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- Android自定义控件系列三:自定义开关按钮(二)
- Android自定义控件系列三:自定义开关按钮(二)
- android zxing自定义界面,点击按钮开关闪光灯
- Android自定义控件系列四:自定义开关按钮(三)--- 自定义属性
- Android UI 之居间绘制文本内容的正确方法——实现自定义一个TextView
- Android自定义控件系列三:自定义开关按钮(二)
- Android自定义控件系列四:自定义开关按钮(三)--- 自定义属性
- Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件
- Android自定义控件——自定义View绘制钟表
- 【Android界面实现】自定义滑动开关控件的实现与使用
- Android自定义控件系列二:自定义开关按钮(一)
- Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件
- Android自定义控件系列二:自定义开关按钮(一)
- Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件
- Android自定义控件系列二:自定义开关按钮(一)
- Android自定义控件系列二:自定义开关按钮
- Android自定义控件系列四:自定义开关按钮(三)--- 自定义属性
- Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件
- Android自定义控件系列三:自定义开关按钮(二)