Android自定义控件7--自定义开关--绘制界面内容
本文实现全自定义控件--自定义开关
本文地址: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--自定义开关--绘制界面内容相关推荐
- Android自定义控件之自定义时钟
Android自定义控件之自定义时钟 这个是我从别的开源项目中挖出来的,真心写的很不错,然后继续下来以便不时之需,直接上代码: WatcherBoard.java这个是自定义的时钟类 package ...
- android如何让自定义控件居中,Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中...
如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextViewpackage com.test.signcalendar.w ...
- Android 如何将Canvas上绘制的内容保存成本地图片
效果如下图所示 保存在sd卡上的文件为 手机上显示效果为: 1>>在Manifest文件中增加相应权限 <!-- 在SDCard中创建与删除文件权限 --><uses-p ...
- Android开发之自定义SurfaceView绘制动效音波图 | 动效音阶图 | Android自定义View
老套路献上图: 第一张是通过播放歌曲拿到歌曲播放的数据进行动态展示的 第二张是通过定时器随机生成的数据动态展示的 先说下这个自定义view也不难很简单,就是绘制矩形,唯一的难点在于计算矩形的坐标 说下 ...
- 玩转android自定义控件二——自定义索引栏listview
带索引栏的listview,在android开发非常普遍,方便用户进行字母索引,就像微信通讯录这样: 今天,我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了,我们应当梳理出一个 ...
- Android开发之自定义view绘制坐标位置出错的问题解决
老套路先看效果图 解释下:如上图我自定义view的时候再onDraw方法进行绘制文本的时候想要的效果是让文字居中,计算都是正确的,相应的坐标也打印出来手动计算检查了下都是对的,但是就是有问题,问题就是 ...
- android textview 楷体,Android自定义控件之自定义Text,画出米字格-FenGKun
public class WordText extends TextView { /** 画笔 */ private Paint paint = new Paint(); // 定义画笔 public ...
- Android自定义控件进阶13-MotionEvent详解
Android MotionEvent 详解,之前用了两篇文章 事件分发机制原理 和 事件分发机制详解 来讲解事件分发,而作为事件分发主角之一的 MotionEvent 并没有过多的说明,本文就带大家 ...
- Android自定义控件进阶12-事件分发机制原理
Android 事件分发机制详解,在上一篇文章 事件分发机制原理 中简要分析了一下事件分发机制的原理,原理是十分简单的,一句话就能总结:责任链模式,事件层层传递,直到被消费. 虽然原理简单,但是随着 ...
- Android自定义控件进阶03-Canvas之画布操作
Android自定义控件进阶03-Canvas之画布操作 本来想把画布操作放到后面部分的,但是发现很多图形绘制都离不开画布操作,于是先讲解一下画布的基本操作方法. 一.Canvas的常用操作速查表 操 ...
最新文章
- 手把手教你EEG脑电数据预处理-操作篇
- vissim跟驰模型_VISSIM是什么工具?你对VISSIM了解多少?
- Oracle-SQL语法基础【以一个完整项目为例】
- win10+ubuntu14.04双系统硬盘安装教程
- Hyperopt TypeError: 'generator' object is not subscriptable
- 网易严选的wkwebview测试之路
- C语言 assert 函数 - C语言零基础入门教程
- 中国十大城市美女(经典套图)
- WindowsServerAppFabric1.1安装失败、配置失败、1603错误码解决方案
- CodeForces - 884B Japanese Crosswords Strike Back
- css 去除png图片黑色背景色,css的filter给png图片换色
- 解决VMware虚拟机中鼠标闪烁问题
- Ubuntu强制修改root密码
- 蚂蚁金服区块链+公益又有新动作,助力相互保险爱心救助账户
- ensp华为路由器静态配置和动态配置
- RankNet学习思路+损函感悟+\pi \xu 学xi+交叉熵损函详
- 如何编写 Runkeeper 一样的 app(2)
- Android Handler机制(一) 为什么设计Handler
- Lect2_MDPs
- 前端学习随笔 css篇
热门文章
- 【OpenCV学习笔记】【编程实例】五 (霍夫圆检测)
- 【LeetCode】【数组】题号:*304,二维区域和检索
- 程序员必备算法——算法相关链接总结
- plt.plot绘图
- python socket 通信(2) 协程实现多人聊天室
- 图片弹幕蒙版java实现_通过css3实现蒙版弹幕
- android如何去掉自动更新,如何停止Android手机上的应用程序自动更新
- c语言规定棋盘大小的,求数据结构C语言大神们解释下马踏棋盘程序
- Flink + Hudi 在 Linkflow 构建实时数据湖的生产实践
- 开篇 | 揭秘 Flink 1.9 新架构,Blink Planner 你会用了吗?