Android 自定义View---ToggleButton

Android 中的 ToggleButton — 是什么以及如何使用。 在这篇文章中,您将了解 Android 中的 ToggleButton。您将了解什么是切换按钮以及如何在 Android 应用程序中使用它 阅读详情

一、View

Android所有的控件都是View或者View的子类,它其实表示的就是屏幕上的一块矩形区域,用一个Rect来表示,left,top表示View相对于它的parent View的起点,width,height表示View自己的宽高,通过这4个字段就能确定View在屏幕上的位置,确定位置后就可以开始绘制View的内容了。
二、View的绘制过程

1)Measure
View会先做一次测量,算出自己需要占用多大的面积。View的Measure过程给我们暴露了一个接口onMeasure;

2)Layout
Layout过程对于View类非常简单,同样View给我们暴露了onLayout方法,onLayout方法中,我们需要将所有子View的大小宽高设置好;

3)Draw
Draw过程,就是在canvas上画出我们需要的View样式。同样View给我们暴露了onDraw方法。


  • onMeasure()会在初始化之后调用一到多次来测量控件或其中的子控件的宽高;
  • onLayout()会在onMeasure()方法之后被调用一次,将控件或其子控件进行布局;
  • onDraw()会在onLayout()方法之后调用一次,也会在用户手指触摸屏幕时被调用多次,来绘制控件。

三、自定义View的步骤

1)自定义View的属性

2)在View的构造方法中获得我们自定义的属性

3)重写onMesure

4)重写onDraw

四、ToggleButton自定义分析

1、自定义View的属性,首先在res/values/  下建立一个attrs.xml , 在里面定义我们的属性和声明我们的整个样式。

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ToggleButton">
        <attr name="tbBorderWidth" format="dimension"/>
        <attr name="tbOffBorderColor" format="reference|color"/>
        <attr name="tbOffColor" format="reference|color"/>
        <attr name="tbOnColor" format="reference|color"/>
        <attr name="tbSpotColor" format="reference|color"/>
        <attr name="tbAnimate" format="reference|boolean"/>
        <attr name="tbAsDefaultOn" format="reference|boolean"/>
    </declare-styleable>
</resources>

format是值该属性的取值类型:一共有string,color,demension,integer,enum,reference,float,boolean,fraction,flag;

2、布局文件声明自定义View

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              xmlns:toggle="http://schemas.android.com/apk/res-auto"
              android:background="#fff"
              android:orientation="vertical"
              android:padding="20dp">

    <LinearLayout
        android:id="@+id/group1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.zcw.togglebutton.ToggleButton
            android:layout_width="54dp"
            android:layout_height="30dp">
        </com.zcw.togglebutton.ToggleButton>

        <com.zcw.togglebutton.ToggleButton
            android:layout_width="54dp"
            android:layout_height="30dp"
            android:layout_marginLeft="20dp">
        </com.zcw.togglebutton.ToggleButton>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <com.zcw.togglebutton.ToggleButton
            android:layout_width="54dp"
            android:layout_height="30dp"
            toggle:tbBorderWidth="2dp"
            toggle:tbOffBorderColor="#000"
            toggle:tbOffColor="#ddd"
            toggle:tbOnColor="#f00"
            toggle:tbSpotColor="#00f">
        </com.zcw.togglebutton.ToggleButton>

        <com.zcw.togglebutton.ToggleButton
            android:layout_width="54dp"
            android:layout_height="30dp"
            android:layout_marginLeft="20dp"
            toggle:tbBorderWidth="2dp"
            toggle:tbOffBorderColor="#000"
            toggle:tbOffColor="#ddd"
            toggle:tbOnColor="#f00"
            toggle:tbSpotColor="#00f">
        </com.zcw.togglebutton.ToggleButton>
    </LinearLayout>


    <com.zcw.togglebutton.ToggleButton
        android:layout_width="70dp"
        android:layout_height="30dp"
        android:layout_marginTop="10dp"/>

    <com.zcw.togglebutton.ToggleButton
        android:layout_width="90dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"/>

    <com.zcw.togglebutton.ToggleButton
        android:layout_width="54dp"
        android:layout_height="30dp"
        android:layout_marginTop="10dp"
        toggle:tbAsDefaultOn="true"/>

</LinearLayout>

3、在构造方法中获得自定义的样式

 

private ToggleButton(Context context) {
		super(context);
	}
	public ToggleButton(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		setup(attrs);
	}
	public ToggleButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		setup(attrs);
	}

	public void setup(AttributeSet attrs) {
		paint = new Paint(Paint.ANTI_ALIAS_FLAG);
		paint.setStyle(Style.FILL);
		paint.setStrokeCap(Cap.ROUND);
		
		springSystem = SpringSystem.create();
		spring = springSystem.createSpring();
		spring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(50, 7));
		
		this.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				toggle(defaultAnimate);
			}
		});
		
		TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ToggleButton);
		offBorderColor = typedArray.getColor(R.styleable.ToggleButton_tbOffBorderColor, offBorderColor);
		onColor = typedArray.getColor(R.styleable.ToggleButton_tbOnColor, onColor);
		spotColor = typedArray.getColor(R.styleable.ToggleButton_tbSpotColor, spotColor);
		offColor = typedArray.getColor(R.styleable.ToggleButton_tbOffColor, offColor);
		borderWidth = typedArray.getDimensionPixelSize(R.styleable.ToggleButton_tbBorderWidth, borderWidth);
		defaultAnimate = typedArray.getBoolean(R.styleable.ToggleButton_tbAnimate, defaultAnimate);
		isDefaultOn = typedArray.getBoolean(R.styleable.ToggleButton_tbAsDefaultOn, isDefaultOn);
		typedArray.recycle();
		
		borderColor = offBorderColor;

		if (isDefaultOn) {
			toggleOn();
		}
	}

当我们定义一个新的类继承了View或ViewGroup时,系统都会提示我们重写它的构造方法。View / ViewGroup中又四个构造方法可以重写,它们分别有一、二、三、四个参数。四个参数的构造方法我们通常用不到。这个构造方法中有三个参数:Context上下文、AttributeSet属性集和defStyleAttr自定义属性的引用。这个构造方法不会默认调用,必须要手动调用,这个构造方法和两个参数的构造方法的唯一区别就是这个构造方法给我们默认传入了一个默认属性集。defStyleAttr指向的是自定义属性的<declare-styleable>标签中定义的自定义属性集,我们在创建TypedArray对象时需要用到defStyleAttr。

4、onMeasure

 

@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		
		final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
		final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
		
		int widthSize = MeasureSpec.getSize(widthMeasureSpec);
		int heightSize = MeasureSpec.getSize(heightMeasureSpec);
		
		Resources r = Resources.getSystem();
		if(widthMode == MeasureSpec.UNSPECIFIED || widthMode == MeasureSpec.AT_MOST){
			widthSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, r.getDisplayMetrics());
			widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
		}
		
		if(heightMode == MeasureSpec.UNSPECIFIED || heightSize == MeasureSpec.AT_MOST){
			heightSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30, r.getDisplayMetrics());
			heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
		}
		
		
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

onMeasure()方法中主要负责测量,决定控件本身或其子控件所占的宽高。我们可以通过onMeasure()方法提供的参数widthMeasureSpec和heightMeasureSpec来分别获取控件宽度和高度的测量模式和测量值(测量 = 测量模式 + 测量值)。

widthMeasureSpec和heightMeasureSpec虽然只是int类型的值,但它们是通过MeasureSpec类进行了编码处理的,其中封装了测量模式和测量值,因此我们可以分别通过MeasureSpec.getMode(xMeasureSpec)和MeasureSpec. getSize(xMeasureSpec)来获取到控件或其子View的测量模式和测量值。

测量模式分为以下三种情况:

1)  EXACTLY:当宽高值设置为具体值时使用,如100DIP、match_parent等,此时取出的size是精确的尺寸;

2)  AT_MOST:当宽高值设置为wrap_content时使用,此时取出的size是控件最大可获得的空间;

3)  UNSPECIFIED:当没有指定宽高值时使用(很少见)。

5、onLayout

@Override
	protected void onLayout(boolean changed, int left, int top, int right,
			int bottom) {
		super.onLayout(changed, left, top, right, bottom);
		
		final int width = getWidth();
		final int height = getHeight();
		
		radius = Math.min(width, height) * 0.5f;
		centerY = radius;
		startX = radius;
		endX = width - radius;
		spotMinX = startX + borderWidth;
		spotMaxX = endX - borderWidth;
		spotSize = height - 4 * borderWidth;
		spotX = toggleOn ? spotMaxX : spotMinX;
		offLineWidth = 0;
	}


onLayout()方法负责布局,大多数情况是在自定义ViewGroup中才会重写,主要用来确定子View在这个布局空间中的摆放位置。

onLayout(boolean changed, int l, int t, int r, int b)方法有5个参数,其中changed表示这个控件是否有了新的尺寸或位置;l、t、r、b分别表示这个View相对于父布局的左/上/右/下方的位置。

6、onDraw

@Override
	public void draw(Canvas canvas) {
		//
		rect.set(0, 0, getWidth(), getHeight());
		paint.setColor(borderColor);
		canvas.drawRoundRect(rect, radius, radius, paint);
		
		if(offLineWidth > 0){
			final float cy = offLineWidth * 0.5f;
			rect.set(spotX - cy, centerY - cy, endX + cy, centerY + cy);
			paint.setColor(offColor);
			canvas.drawRoundRect(rect, cy, cy, paint);
		}
		
		rect.set(spotX - 1 - radius, centerY - radius, spotX + 1.1f + radius, centerY + radius);
		paint.setColor(borderColor);
		canvas.drawRoundRect(rect, radius, radius, paint);
		
		final float spotR = spotSize * 0.5f;
		rect.set(spotX - spotR, centerY - spotR, spotX + spotR, centerY + spotR);
		paint.setColor(spotColor);
		canvas.drawRoundRect(rect, spotR, spotR, paint);
		
	}


onDraw()方法负责绘制,即如果我们希望得到的效果在Android原生控件中没有现成的支持,那么我们就需要自己绘制我们的自定义控件的显示效果。

  要学习onDraw()方法,我们就需要学习在onDraw()方法中使用最多的两个类:Paint和Canvas。

  注意:每次触摸了自定义View/ViewGroup时都会触发onDraw()方法。

Paint画笔对象,这个类中包含了如何绘制几何图形、文字和位图的样式和颜色信息,指定了如何绘制文本和图形。画笔对象右很多设置方法,大体上可以分为两类:一类与图形绘制有关,一类与文本绘制有关。

Canvas即画布,其上可以使用Paint画笔对象绘制很多东西。

 

 

 

 

Android 之开关按钮 ToggleButton 和开关 Switch 本节给大家介绍的Android基本UI控件是:开关按钮ToggleButton和开关Switch,可能大家对着两个组件 并不熟悉,突然想起笔者的第一间外包公司,是否在wifi下联网的开关,竟然用的TextView,然后叫美工 且两个切换前后的图,然后代码中进行设置,当然点击TextView的时候判断状态,然后设置对应的背景...if(compoundButton.isChecked()) Toast.makeText(this,"开关:ON",Toast.LENGTH_SHORT).show(); 阅读详情

相关推荐

Android UI(ToggleButton)详解

目录:     1.应用场景     2.常用属性            3.事件监听与基本使用     4.自定义ToggleButton         4.1 java代码自定义可拖动ToggleButton         4.2 Selector自定义点击切换ToggleButton              5.设置统一风格      1.应用场景      To

Andy_lau 2200

学Android---ToggleButton

1、什么是ToggleButton: Toggle,意思是切换,转换。ToggleButton自然就表示切换按钮了。它有两种状态,分别是选中和未选中,并且需要为不同的状态设置不同的显示文本。就像是手电筒的开关按钮一样,初始状态为关,按下按钮,手电打开,再按下又切换为关闭状态。2、ToggleButton常用属性: android:checked = “true” /

我的成长之路 1106

UI控件之开关按钮(ToggleButton与Switch)

简介     ToggleButton是状态开关按钮,而Switch是开关,我想说的是,看着ToggleButton的外貌就是气,也太难看了。相比较之下,我觉得Switch还是一个美男子。不说闲话了,这两者的原始外观如下:     布局一般都是采用XML布局,减少代码冗余,干净整洁,真是极好的,它们两个布局几乎一模一样。主要在于要注意设置两个属性: android:textOn 和

一个大金宝的博客 3213

Android 基础知识4-3.6 ToggleButton(开关按钮)&Switch(开关)详解

ToggleButton 类似开关有开和关两种状态,不同的状态下可以有不同的文本。

yyxhzdm的博客 1312

Spring Boot应用Docker化实战:从Dockerfile编写到镜像推送完整流程

本文详细介绍了将Spring Boot应用Docker化的完整实战流程。从环境准备、项目审视,到编写高效且安全的Dockerfile,重点讲解了多阶段构建、镜像层优化、Spring Boot分层JAR等核心技巧,并涵盖了镜像构建、验证、调试以及最终推送至仓库并集成CI/CD的最佳实践,帮助开发者构建生产级Docker镜像。

butter的博客 1023

FunASR与FreeSWITCH融合实战:从零构建高精度语音质检系统

本文详细介绍了如何将FunASR与FreeSWITCH融合,构建高精度语音质检系统。通过实时语音听写技术,结合热词定制和多模型切换,实现客服中心等场景的自动化质检,显著提升识别准确率和效率。系统架构涵盖音频采集、识别处理和业务应用三层,支持负载均衡和性能优化,适用于工业级部署。

weixin_29198045的博客 980

Android自定义View仿IOS选择控件Togglebutton实现

Android自定义View仿IOS选择控件Togglebutton实现 目前在搞自定义view这一块的东西,将自己手写的很多效果控件将全部展示在博客中,这个是模仿ios的一个控件,虽然有原生的可以直接用了,但是毕竟知道实现更有助于自己写出风格各样的自定义控件。文中会贴出代码,但如果想在实际项目中使用,还需要增加很多逻辑判断以及监听回掉。 原效果图如下: 画图分析自定义view的绘

3733

震坤行:企业 MRO 物料标准化革新之路

那产生这些问题的原因是什么呢?要想解决此问题,企业高层必须下定决心对历史数据进行梳理,并善于利用信息技术,融合企业管理的流程机制,建立起一套适合企业发展的物料标准化管理体系,循序渐进,逐步规避由物料不规范带来的管理问题,最终使得这套标准化体系能够满足企业多元化业务发展需要。国内某电子制造头部企业原先内部物料无对应分类,仅有物料编码,给企业对采购、领料的过程中造成极大的不变,基于震坤行的目录结构,预测物料对应的分类,预测准确率达到80%以上,再辅以人工校正,最终搭建起一套标准的目录体系,如图2.2所示。

carson99的博客 421

Android 自定义View之随手指滑动的ToggleButton

因为项目里需要可滑动的ToggleButton,就去网上搜了一下,下载了两个例子看下,一个是仿ios6.0的滑动效果,虽说是滑动,但不是我想要的样式,还有一个是使用的facebook开源框架rebound的动画效果的ToggleButton,效果很赞,可惜的是不支持滑动。一开始我是想在第二种例子上做点文章,重写onDraw和onTouch方法支持滑动的同时还有动画效果。可惜的是尝试失败了,主要原因还

kobe_sun的博客 1010

深入理解梅尔刻度、梅尔滤波器组和梅尔时频谱图

读取一段音频,使用短时傅里叶变换,得到普通的时频谱图,然后绘制梅尔滤波器组,值得注意的是,librosa的梅尔滤波器组函数还带有权重归一化功能,即对一个三角形滤波器的每个权重,都除以该三角形的面积,如果不希望进行该归一化,设置参数。从公式可见,对数部分可以以自然对数为底数,也可以以10为底数,不同的底数对应不同的系数,要确定当前的系数,只需要代入(1000Hz, 1000mel)即可。其中,m是当前滤波器的序号,表征了当前的时间段,k是当前频率的序号,表征了当前正在对哪一频率的。

DEDSEC_Roger的博客 1万+

别再只调电位器了!用单片机PWM控制LM317输出电压,精度和玩法都多了

本文探讨了如何利用单片机PWM控制LM317输出电压,替代传统的电位器调节方案。通过PWM信号的有源滤波和运放处理,实现了更高精度(±5mV)、更好温度稳定性(0.01%/°C)的数控稳压电源设计,支持远程控制和可编程曲线输出,为经典电路注入数字化智能。

weixin_29164497的博客 358

自定义view-Android 简单的滑动开关 ToggleButton

闲的没事,写一个自定义的滑动开关按钮ToggleButton 按钮图可以使用图片或者xml绘制的drawable文件,demo中使用的是默认的,可以直接替换成自己需要的。 效果: 使用很简单 1.将toggle-1.0.arr文件放入libs目录下 2.在build.gradle中加入依赖 implementation(name: 'toggle-1.0', ext: 'aar') 以上两步完成就可以使用了 1.在xml布局中使用 xmlns:app="http://schemas

Rango的专栏 652

OpenClaw本地部署教程

本文详细介绍了在Windows 11系统上部署OpenClaw与Ollama本地模型的完整流程。主要内容包括:硬件要求说明、Node.js环境配置、Ollama模型安装与定制(重点扩展上下文窗口至32768 tokens)、OpenClaw核心框架安装与对接、常见问题解决(如模型上下文窗口过小报错)以及可选技能扩展和飞书接入方案。部署全程约需1-2小时,强调使用备用设备或虚拟机以确保安全,并提供关键配置参数和排错命令。该方案实现了"数据不出门、推理本地化"的私有化部署目标。

技术引领业务创新 2580

Android 自定义ToggleButton

Android自定义ToggleButton1.需求 在项目需求中,可能需要自定义开关按钮,于是本人就根据网上的教程写了个符合自己需求的按钮 首先看一下要实现的效果:有4中图片的切换效果,点击切换开关状态,还要求支持滑动切换。 2.解决思路 写个MyToggleButton类,继承自View,重写onDraw,onClick,onMeasure,onTouchEvent等事件,

小强程序设计工作室 的博客 673

Pytorch transformers tokenizer 分词器词汇表添加新的词语和embedding

NLP添加新词汇

7322

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5436

自定义开关按钮

1.定义一个类ToggleButton,继承View  2.在布局文件中使用该自定义view   3.创建与父类相同的构造器。  4.重写onMesuer和onDraw方法 5.在自定义ToggleButton中定义设置开关按钮图片方法,设置开关按钮背景方法  6.在MainActivity类中使用该view,给该自定义view设置背景图片和按钮图片 具体实现代码如下:

ning_xian_hong的专栏 1159

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java实现开关按钮_Android自定义开关按钮ToggleButton

简介由于项目开发需要,所以做了一个自定义的开关按钮,样式类似于Android5.0中开关按钮,也有开启关闭的切换效果,在这里和大家分享一下,先看一下效果图如下:togglebutton.gif看过效果图以后我们废话不多说,直接来看一下实现代码。实现这里主要是写了一个类去继承View,然后不断的对它进行重绘以显示出这种效果,该类ToggleButton.java的实现代码如下:public clas...

weixin_35705874的博客 513

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android开关按钮

刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心。 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按钮效果。 起初我在android上我只会使用CheckBox去满足对应的功能。后来,查看开发文档发现,android也有了自己的原生态开关控件,并且在4.0版本中又优化加入了新的类似控件--Switch控件,以及使用起来十分简单的T

xiangzhihong8的专栏 3496

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 开关按钮

刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心。 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按钮效果。 起初我在android上我只会使用CheckBox去满足对应的功能。后来,查看开发文档发现,android也有了自己的原生态开关控件,并且在4.0版本中又优化加入了新的类似控件--Switch控件,以及使用起来十分简单的T

我的专栏 2236

【Android基础】应用界面编程

介绍 本章会介绍Android程序界面和很多组件的知识,是界面需要的知识。 通过学习本章的知识,可以开发出漂亮的图形用户界面,这些图形用户界面是Android应用开发的基础,也是非常重要的组成部分。 视图组件和容器组件 Android的绝大部分UI组件在android.widget包及其子包、android.view包及其子包中,Android的所有UI组件都继承于View类。 View类有一个重要的子类:ViewGroup,但是ViewGroup通常作为其他组件的容器使用。 Android推荐

kuangd_1992的博客 3639

android togglebutton 自定义,自定义控件之-----ToggleButton

先来张效果图banner.gif步骤思路继承View1、测量自己的宽高2、绘制自己3、处理触摸事件1、继承Viewpublic class MyToggleButton extends View {public MyToggleButton(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defSt...

weixin_29664819的博客 550

SwitchButton 开关按钮 的多种实现方式 (附源码DEMO)

刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心。 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按钮效果。 起初我在android上我只会使用CheckBox去满足对应的功能。后来,查看开发文档发现,android也有了自己的原生态开关控件,并且在4.0版本中又优化加入了新的类似控件--Switch控件,以及使用起来十分简单的T

未来之路 的专栏 12万+

SwitchButton 开关按钮 的多种实现方式 (附源码DEMO)

http://blog.youkuaiyun.com/vipzjyno1/article/details/23707149#comments http://blog.youkuaiyun.com/vipzjyno1/article/details/23707149#comments http://blog.youkuaiyun.com/vipzjyno1/article/details/23707149#comments

512

android 点击button 出现popupwindow的二级联动菜单(仿美团)

注:本文转载于:http://blog.youkuaiyun.com/minimicall/article/details/39484493 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单。具体如图所示:     上图就是美团的一个二级列表菜单的一个展示。我相信很多人都想开发一个跟它一样的功能放到自己的APP中。好,接下来我们就开始动手,解决它。 ...

qq_28845393的博客 1759
上一篇: Android Window
下一篇: 基于HLS协议的无插件HTML5流媒体播放
-无-怨-无-悔-
博客等级 码龄16年 130粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值