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

本文地址: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.ToggleViewandroid: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);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(switchBackgroundBitmap.getWidth(),switchBackgroundBitmap.getHeight());}/** * Canvas: 画布,画板,在上面绘制的内容都会显示在界面上*/@Overrideprotected 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--自定义开关--绘制界面内容相关推荐

  1. Android自定义控件之自定义时钟

    Android自定义控件之自定义时钟 这个是我从别的开源项目中挖出来的,真心写的很不错,然后继续下来以便不时之需,直接上代码: WatcherBoard.java这个是自定义的时钟类 package ...

  2. android如何让自定义控件居中,Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中...

    如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextViewpackage com.test.signcalendar.w ...

  3. Android 如何将Canvas上绘制的内容保存成本地图片

    效果如下图所示 保存在sd卡上的文件为 手机上显示效果为: 1>>在Manifest文件中增加相应权限 <!-- 在SDCard中创建与删除文件权限 --><uses-p ...

  4. Android开发之自定义SurfaceView绘制动效音波图 | 动效音阶图 | Android自定义View

    老套路献上图: 第一张是通过播放歌曲拿到歌曲播放的数据进行动态展示的 第二张是通过定时器随机生成的数据动态展示的 先说下这个自定义view也不难很简单,就是绘制矩形,唯一的难点在于计算矩形的坐标 说下 ...

  5. 玩转android自定义控件二——自定义索引栏listview

    带索引栏的listview,在android开发非常普遍,方便用户进行字母索引,就像微信通讯录这样: 今天,我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了,我们应当梳理出一个 ...

  6. Android开发之自定义view绘制坐标位置出错的问题解决

    老套路先看效果图 解释下:如上图我自定义view的时候再onDraw方法进行绘制文本的时候想要的效果是让文字居中,计算都是正确的,相应的坐标也打印出来手动计算检查了下都是对的,但是就是有问题,问题就是 ...

  7. android textview 楷体,Android自定义控件之自定义Text,画出米字格-FenGKun

    public class WordText extends TextView { /** 画笔 */ private Paint paint = new Paint(); // 定义画笔 public ...

  8. Android自定义控件进阶13-MotionEvent详解

    Android MotionEvent 详解,之前用了两篇文章 事件分发机制原理 和 事件分发机制详解 来讲解事件分发,而作为事件分发主角之一的 MotionEvent 并没有过多的说明,本文就带大家 ...

  9. Android自定义控件进阶12-事件分发机制原理

    Android 事件分发机制详解,在上一篇文章 事件分发机制原理 中简要分析了一下事件分发机制的原理,原理是十分简单的,一句话就能总结:责任链模式,事件层层传递,直到被消费. 虽然原理简单,但是随着 ...

  10. Android自定义控件进阶03-Canvas之画布操作

    Android自定义控件进阶03-Canvas之画布操作 本来想把画布操作放到后面部分的,但是发现很多图形绘制都离不开画布操作,于是先讲解一下画布的基本操作方法. 一.Canvas的常用操作速查表 操 ...

最新文章

  1. 手把手教你EEG脑电数据预处理-操作篇
  2. vissim跟驰模型_VISSIM是什么工具?你对VISSIM了解多少?
  3. Oracle-SQL语法基础【以一个完整项目为例】
  4. win10+ubuntu14.04双系统硬盘安装教程
  5. Hyperopt TypeError: 'generator' object is not subscriptable
  6. 网易严选的wkwebview测试之路
  7. C语言 assert 函数 - C语言零基础入门教程
  8. 中国十大城市美女(经典套图)
  9. WindowsServerAppFabric1.1安装失败、配置失败、1603错误码解决方案
  10. CodeForces - 884B Japanese Crosswords Strike Back
  11. css 去除png图片黑色背景色,css的filter给png图片换色
  12. 解决VMware虚拟机中鼠标闪烁问题
  13. Ubuntu强制修改root密码
  14. 蚂蚁金服区块链+公益又有新动作,助力相互保险爱心救助账户
  15. ensp华为路由器静态配置和动态配置
  16. RankNet学习思路+损函感悟+\pi \xu 学xi+交叉熵损函详
  17. 如何编写 Runkeeper 一样的 app(2)
  18. Android Handler机制(一) 为什么设计Handler
  19. Lect2_MDPs
  20. 前端学习随笔 css篇

热门文章

  1. 【OpenCV学习笔记】【编程实例】五 (霍夫圆检测)
  2. 【LeetCode】【数组】题号:*304,二维区域和检索
  3. 程序员必备算法——算法相关链接总结
  4. plt.plot绘图
  5. python socket 通信(2) 协程实现多人聊天室
  6. 图片弹幕蒙版java实现_通过css3实现蒙版弹幕
  7. android如何去掉自动更新,如何停止Android手机上的应用程序自动更新
  8. c语言规定棋盘大小的,求数据结构C语言大神们解释下马踏棋盘程序
  9. Flink + Hudi 在 Linkflow 构建实时数据湖的生产实践
  10. 开篇 | 揭秘 Flink 1.9 新架构,Blink Planner 你会用了吗?