• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 自定义控件——开关按钮ToggleButton,控件togglebutton

自定义控件——开关按钮ToggleButton,控件togglebutton

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了自定义开关控件,自定义控件,android 自定义控件,安卓自定义控件,c#自定义控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

自定义控件——开关按钮ToggleButton,控件togglebutton


  实现一个类似于ToggleButton的开关按钮

  效果图:

  

  资源图片:

  

  1.自定义控件类

  

  1 package com.dc.customview.view;
  2 
  3 import com.dc.customview.R;
  4 
  5 import android.content.Context;
  6 import android.graphics.Bitmap;
  7 import android.graphics.BitmapFactory;
  8 import android.graphics.Canvas;
  9 import android.util.AttributeSet;
 10 import android.view.MotionEvent;
 11 import android.view.View;
 12 
 13 public class CustomToggleButton extends View {
 14     private boolean state;//开关状态,默认false,关
 15     private boolean isTounching;//是否触摸状态
 16     private int currentX;
 17     private Bitmap backBitmap;
 18     private Bitmap overBitmap;
 19     
 20     /**
 21      * 有style文件时调用
 22      * @param context
 23      * @param attrs
 24      * @param defStyle
 25      */
 26     public CustomToggleButton(Context context, AttributeSet attrs, int defStyle) {
 27         super(context, attrs, defStyle);
 28     }
 29 
 30     /**
 31      * xml中调用
 32      * @param context
 33      * @param attrs
 34      */
 35     public CustomToggleButton(Context context, AttributeSet attrs) {
 36         super(context, attrs);
 37     }
 38     /**
 39      * java代码中调用
 40      * @param context
 41      */
 42     public CustomToggleButton(Context context) {
 43         super(context);
 44     }
 45     
 46     /**
 47      * 设置开关状态
 48      * @param value
 49      */
 50     public void setState(boolean value){
 51         this.state = value;
 52     }
 53     /**
 54      * 获取开关状态
 55      * @param value
 56      * @return
 57      */
 58     public boolean getState(boolean value){
 59         return state;
 60     }
 61     
 62     /**
 63      * 先拿到自定义控件需要的两张图片,并且设置自定义控件的宽高
 64      * 如果不设置,则这个自定义控件可以接收到全屏的触摸事件,即相当于这个自定义控件占了全屏
 65      * @param widthMeasureSpec
 66      * @param heightMeasureSpec
 67      */
 68     @Override
 69     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 70         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 71         //底层图片
 72         backBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.switch_background);
 73         //上层图片
 74         overBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.slide_button_background);
 75 
 76         //宽高 和 底层图片一样
 77         setMeasuredDimension(backBitmap.getWidth(), backBitmap.getHeight());
 78     }
 79     
 80     /**
 81      * 绘制开关
 82      * @param canvas
 83      */
 84     @Override
 85     protected void onDraw(Canvas canvas) {
 86         super.onDraw(canvas);
 87         //1.绘制底层图片
 88         canvas.drawBitmap(backBitmap, 0, 0, null);
 89         
 90         //2.绘制上层图片
 91         if(isTounching){//上层图片跟随滑动
 92             
 93             /*
 94              * 防止上层图片滑动出下层图片的范围
 95              */
 96             //算出当前触摸点为上层图片的中心点时,上层图片的左侧坐标距离
 97             int left  = currentX-overBitmap.getWidth()/2;
 98             
 99             if(left<0){//防止左侧出界
100                 left = 0;
101             }else if(left > backBitmap.getWidth() - overBitmap.getWidth()){//防止右侧出界
102                 left = backBitmap.getWidth() - overBitmap.getWidth();
103             }
104             canvas.drawBitmap(overBitmap, left, 0, null);
105             
106         }else{//上层图片直接跳到开或关的位置
107             if(state){
108                 //开
109                 canvas.drawBitmap(overBitmap, backBitmap.getWidth()-overBitmap.getWidth(), 0, null);
110             }else{
111                 //关
112                 canvas.drawBitmap(overBitma



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 自定义控件——开关按钮ToggleButton,控件togglebutton

相关文章

  • 2017-05-26Android安全攻防战,反编译与混淆技术完全解析(上)
  • 2017-05-26android小知识点代码片段
  • 2017-05-26Android之Activity系列总结(一)--Activity概览,android--activity
  • 2017-05-26Unity编译时找不到AndroidSDK的问题 | Unable to list target platforms(转载),unityengine.ui找不到
  • 2017-05-26硅谷商城第二版3--分类模块,硅谷商城第二版3--
  • 2017-05-26android TextView 设置字体大小,androidtextview
  • 2017-05-26android布局不带参数返回,android布局参数
  • 2017-05-26msm8909+android5.1.1--打开调试(debug)串口
  • 2017-05-26一个简单的Makefile编译框架
  • 2017-05-26手把手教你打造一个心电图效果View Android自定义View

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 5.2.5 Fragment实例精讲——新闻(购物)类App列表Fragment的简单实现
    • 安卓当下最流行的吸顶效果的实现(转),安卓当下
    • Android安全攻防战,反编译与混淆技术完全解析(下)
    • android 关于4.0之后不能直接获取SD卡外部存储路径的问题,androidsd
    • 报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.,theme.appcompat报错
    • Android属性动画
    • Android第一天--&gt;布局,android第一天--
    • android开发中遇到的问题汇总【九】
    • Android handler 详解(面试百分之100问到),androidhandler
    • Solaris IPMP两种配置方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有