本文实现全自定义控件--自定义开关
本文地址: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自定义控件7--自定义开关--绘制界面内容的更多相关文章
-
Android自定义控件之自定义ViewGroup实现标签云
前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...
-
Android自定义控件之自定义组合控件
前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...
-
Android自定义控件之自定义组合控件(三)
前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...
-
android自定义控件(4)-自定义水波纹效果
一.实现单击出现水波纹单圈效果: 照例来说,还是一个自定义控件,观察这个效果,发现应该需要重写onTouchEvent和onDraw方法,通过在onTouchEvent中获取触摸的坐标,然后以这个坐标 ...
-
android自定义控件(3)-自定义当前按钮属性
那么还是针对我们之前写的自定义控件:开关按钮为例来说,在之前的基础上,我们来看看有哪些属性是可以自定义的:按钮的背景图片,按钮的滑块图片,和按钮的状态(是开还是关),实际上都应该是可以在xml文件中直 ...
-
android自定义控件(五) 自定义组合控件
转自http://www.cnblogs.com/hdjjun/archive/2011/10/12/2209467.html 代码为自己编写 目标:实现textview和ImageButton组合, ...
-
Android 如何将Canvas上绘制的内容保存成本地图片(转)
效果如下图所示 保存在sd卡上的文件为 手机上显示效果为: 1>>在Manifest文件中增加相应权限 <!-- 在SDCard中创建与删除文件权限 --> <uses- ...
-
老猪带你玩转android自定义控件二——自定义索引栏listview
带索引栏的listview,在android开发非常普遍,方便用户进行字母索引,就像微信通讯录这样: 今天,我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了,我们应当梳理出一个 ...
-
玩转android自定义控件二——自定义索引栏listview
带索引栏的listview,在android开发非常普遍,方便用户进行字母索引,就像微信通讯录这样: 今天,我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了,我们应当梳理出一个 ...
随机推荐
-
https问答篇
https问答 SSL和TLS有什么区别? 可以说,TLS是SSL的升级版本,SSL是网景公司设计的,为了最早期的网络安全而生,它的全名叫做"安全套接层".后来,IETF在1999 ...
-
XML入门级的简单学习
xml案例<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Ge ...
-
PHP 防范CC攻击
CC攻击就是对方利用程序或一些代理对您的网站进行不间断的访问,造成您的网站处理不了而处于当机状态,下面是PHP方法:将以下代码另存为php文件,然后首行include入你的common.php文件中. ...
-
POJ1094 拓扑排序
问题:POJ1094 本题考查拓扑排序算法 拓扑排序: 1)找到入度为0的点,加入已排序列表末尾: 2)删除该点,更新入度数组. 循环1)2)直到 1. 所有点都被删除,则找到一个拓扑 ...
-
JS实现页面内跳转
使用js($.ajax中)实现页面内跳转(即:描点平滑跳转)的方法(aa为跳转目的标签的id): 在网络上有很多资料所说的:animate方法我试了并不好使,不知道是啥原因,欢迎大家指正,附上网络方法 ...
-
SQLServer之集合
集合的定义 集合是由一个或多个元素构成的整体,在SQLServer中的表就代表着事实集合,而其中的查询就是在集合的基础上生成的结果集.SQL Server的集合包括交集(INTERSECT).并集(U ...
-
mysql基本操作(1)
1.mysql数据库客户端安装 brew install mysql-client 2.mysql 连接数据库 mysql -h <数据库地址> -P <端口> -u < ...
-
面向对象_item项目
详细见老师博客:http://www.cnblogs.com/Eva-J/articles/7351812.html#_label9 __getitem__\__setitem__\__delitem ...
-
HTML5的十大新特性
为了更好地处理今天的互联网应用,HTML5添加了很多新元素及功能,比如: 图形的绘制,多媒体内容,更好的页面结构,更好的形式 处理,和几个api拖放元素,定位,包括网页 应用程序缓存,存储,网络工作者 ...
-
sed初学者实用说明
转自:http://www.codeweblog.com/sed%E5%88%9D%E5%AD%A6%E8%80%85%E5%AE%9E%E7%94%A8%E8%AF%B4%E6%98%8E/ ...