- 浏览: 2204416 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
效果预览:
SlipButton.java
MainActivity.java
下面是用到的三张图片:
SlipButton.java
package com.iaiai.activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; /** * * <p> * Title: SlipButton.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2012-9-28 下午4:33:54 * </p> * * @author 丸子 * @version 0.0.1 */ public class SlipButton extends View implements OnTouchListener { public interface OnChangedListener { abstract void OnChanged(String strName, boolean CheckState); } private String strName; private boolean enabled = true; public boolean flag = false;// 设置初始化状态 public boolean NowChoose = false;// 记录当前按钮是否打开,true为打开,flase为关闭 private boolean OnSlip = false;// 记录用户是否在滑动的变量 public float DownX = 0f, NowX = 0f;// 按下时的x,当前的x,NowX>100时为ON背景,反之为OFF背景 private Rect Btn_On, Btn_Off;// 打开和关闭状态下,游标的Rect private boolean isChgLsnOn = false; private OnChangedListener ChgLsn; private Bitmap bg_on, bg_off, slip_btn; public SlipButton(Context context) { super(context); init(); } public SlipButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void setChecked(boolean fl) { if (fl) { flag = true; NowChoose = true; NowX = 80; } else { flag = false; NowChoose = false; NowX = 0; } } public void setEnabled(boolean b) { if (b) { enabled = true; } else { enabled = false; } } private void init() {// 初始化 // 载入图片资源 bg_on = BitmapFactory.decodeResource(getResources(), R.drawable.on_btn); bg_off = BitmapFactory.decodeResource(getResources(), R.drawable.off_btn); slip_btn = BitmapFactory.decodeResource(getResources(), R.drawable.white_btn); // 获得需要的Rect数据 Btn_On = new Rect(0, 0, slip_btn.getWidth(), slip_btn.getHeight()); Btn_Off = new Rect(bg_off.getWidth() - slip_btn.getWidth(), 0, bg_off.getWidth(), slip_btn.getHeight()); setOnTouchListener(this);// 设置监听器,也可以直接复写OnTouchEvent } @Override protected void onDraw(Canvas canvas) {// 绘图函数 super.onDraw(canvas); Matrix matrix = new Matrix(); Paint paint = new Paint(); float x; { if (flag) { NowX = 80; flag = false; }// bg_on.getWidth()=71 if (NowX < (bg_on.getWidth() / 2))// 滑动到前半段与后半段的背景不同,在此做判断 canvas.drawBitmap(bg_off, matrix, paint);// 画出关闭时的背景 else canvas.drawBitmap(bg_on, matrix, paint);// 画出打开时的背景 if (OnSlip) {// 是否是在滑动状态, if (NowX >= bg_on.getWidth())// 是否划出指定范围,不能让游标跑到外头,必须做这个判断 x = bg_on.getWidth() - slip_btn.getWidth() / 2;// 减去游标1/2的长度... else x = NowX - slip_btn.getWidth() / 2; } else {// 非滑动状态 if (NowChoose)// 根据现在的开关状态设置画游标的位置 x = Btn_Off.left; else x = Btn_On.left; } if (x < 0)// 对游标位置进行异常判断... x = 0; else if (x > bg_on.getWidth() - slip_btn.getWidth()) x = bg_on.getWidth() - slip_btn.getWidth(); canvas.drawBitmap(slip_btn, x, 0, paint);// 画出游标. } } public boolean onTouch(View v, MotionEvent event) { if (!enabled) { return false; } switch (event.getAction()) {// 根据动作来执行代码 case MotionEvent.ACTION_MOVE:// 滑动 NowX = event.getX(); break; case MotionEvent.ACTION_DOWN:// 按下 if (event.getX() > bg_on.getWidth() || event.getY() > bg_on.getHeight()) return false; OnSlip = true; DownX = event.getX(); NowX = DownX; break; case MotionEvent.ACTION_UP:// 松开 OnSlip = false; boolean LastChoose = NowChoose; if (event.getX() >= (bg_on.getWidth() / 2)) NowChoose = true; else NowChoose = false; if (isChgLsnOn && (LastChoose != NowChoose))// 如果设置了监听器,就调用其方法.. ChgLsn.OnChanged(strName, NowChoose); break; default: } invalidate();// 重画控件 return true; } public void SetOnChangedListener(String name, OnChangedListener l) {// 设置监听器,当状态修改的时候 strName = name; isChgLsnOn = true; ChgLsn = l; } }
MainActivity.java
package com.iaiai.activity; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; /** * * <p> * Title: MainActivity.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2012-9-28 下午4:33:54 * </p> * * @author 丸子 * @version 0.0.1 */ public class MainActivity extends Activity implements SlipButton.OnChangedListener { SlipButton button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (SlipButton) findViewById(R.id.slipButton); button.SetOnChangedListener("the one", this); // button.setEnabled(false);//设置button不可用 button.setChecked(true);// 设置button的初始化状态为打开 } @Override public void OnChanged(String strName, boolean CheckState) { if (CheckState) { Toast.makeText(MainActivity.this, strName + " is opened!", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this, strName + " is closed!", Toast.LENGTH_LONG).show(); } } }
下面是用到的三张图片:
评论
5 楼
阿顺顺
2013-05-07
经验证,不能嵌套使用!!不知道怎么改!!
4 楼
gsmhb2005
2013-01-17
楼主这个貌似不能嵌套使用?
3 楼
celia01
2012-12-28
请问,android有自带的开关空间吗?android2.3.3
2 楼
newfido
2012-11-16
xuehaibo08 写道
这里面的main.xml文件能帖给我吗?我用了你的代码出现类载入出现异常
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <com.dem.SlipButton android:id="@+id/slipButton" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
1 楼
xuehaibo08
2012-10-22
这里面的main.xml文件能帖给我吗?我用了你的代码出现类载入出现异常
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 635本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1111颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 1005从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1181Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1020Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 848前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 937监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 808在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 979最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1344##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1143当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 791setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1526问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 781底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1792点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1383import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2337TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1567一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 880Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 941最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
本篇文章将深入探讨如何在Android中创建一个自定义的滑动开关控件。 首先,我们需要了解滑动开关的基本构成。滑动开关通常由两部分组成:一个可滑动的轨道(track)和一个滑块(thumb),用户通过拖动滑块在轨道上...
本教程将深入探讨如何实现一个滑动选择开关(Slide Switch)的自定义控件,该控件通常用于开启或关闭某个功能,如开启蓝牙、Wi-Fi等。 首先,我们需要创建一个新的Java类,继承自Android的`View`类或者`...
"android之自定义开关控件"这个主题旨在教你如何在Android平台上创建一个类似苹果iOS Toggle的自定义开关组件。以下是对这个主题的详细讲解: 一、基础知识 在Android中,开关系列的控件主要包括Switch和...
这篇博客文章的配套源码提供了一个自定义滑动开关的实现,让我们深入探讨这个自定义控件的设计和实现。 首先,滑动开关的基本原理是利用Android的View类或者CompoundButton类进行扩展。在这个例子中,开发者可能...
本文将深入探讨如何使用Android自定义View来实现一个仿iOS风格的开关控件。首先,我们需要了解自定义View的基本流程和关键组件。 一、自定义View基础 自定义View通常涉及到以下步骤: 1. 创建一个新的类,继承自`...
总之,自定义Android滑动开关是一个涉及UI绘制、触摸事件处理和状态管理的过程。通过这种方式,开发者可以创造出符合项目需求的独特组件,提高应用程序的用户体验。提供的资源链接提供了更详细的实现步骤和演示,...
在Android开发中,滑动开关(Switch)是一种常见的UI组件,用于用户进行二选一的选择,比如开启或关闭某个功能。本教程将深入探讨如何在Android应用中实现滑动开关组件,包括基本使用、自定义样式以及事件监听。 ...
在Android开发中,滑动开关按钮(Slider或Switch)是一种常用的UI组件,它允许用户通过简单的左右滑动来切换两种状态,通常用作开/关选项。本篇将深入探讨如何在Android应用中实现苹果风格的滑动开关按钮。 首先,...
滑动开关在Android SDK中被定义为`SwitchCompat`或`Switch`控件,根据不同的设计风格,开发者可以选择使用Material Design的`SwitchCompat`或原生的`Switch`。 **滑动开关的基本使用** 1. **添加依赖**:如果你...
本示例提供的"qt5仿安卓苹果自定义滑动开关控件.rar"就是一个这样的实践,它实现了类似Android和iOS系统中的滑动开关(Slider或Switch)组件,能够清晰地显示开关的状态,并且通过使用定时器来控制滑动动画,增加了...
在Android开发中,滑动开关...总结来说,Android滑动开关SlipButton的实现涉及到了自定义View的绘制、触摸事件处理、动画效果以及状态管理等多个方面,通过这样的定制,我们可以创建出既美观又符合用户习惯的交互控件。
在Android开发中,为了提供与iOS相似的用户体验,开发者经常需要创建自定义控件来实现特定的交互效果,比如仿iOS的滑动开关。本文将深入探讨如何在Android平台上实现这样一个仿iOS风格的滑动开关(Slide Switch)。 ...
在本压缩包"Android 滑动开关按钮源码.rar"中,很可能包含了一个自定义的滑动开关控件的实现代码。下面我们将深入探讨滑动开关在Android中的工作原理、设计与自定义,以及如何在实际项目中应用。 1. **滑动开关的...
在Android SDK中,滑动开关被称为`Switch`控件,自Android API Level 14(ICS,Ice Cream Sandwich)起作为系统自带组件引入。它的外观和行为可以通过XML属性或代码动态设置。例如,你可以通过以下XML代码创建一个...
首先,滑动开关在Android中通常由Switch或CompoundButton类来实现,但我们为了满足特定需求,需要创建一个自定义的View类。创建一个新的Java类,继承自CompoundButton,因为这个类已经包含了开关的基本行为和回调...
在Android原生系统中,开关控件通常是`Switch`或`ToggleButton`,但它们的样式与iOS的滑动开关(UISwitch)有所不同。为了达到仿iPhone的效果,我们需要自定义一个视图组件。 1. **自定义View组件**: - 创建一个...
通过以上步骤,我们可以创建一个功能完备且可定制的滑动开关控件。这个控件不仅可以直接应用于项目中,也可以作为一个基础,根据设计需求调整样式和动画效果。在实际开发过程中,可以参考提供的"开关按钮"资源文件...
我们将详细探讨滑动开关在Android中的工作原理,以及如何通过源码来理解和定制此类控件。 1. **滑动开关组件介绍** - Android中的滑动开关是`Switch`控件,属于`CompoundButton`家族,继承自`ToggleButton`。它...
在本压缩包文件"android滑动开关按钮.zip"中,我们很可能是找到了关于如何在Android应用中实现自定义滑动开关的相关代码和资源。 首先,Android系统提供了默认的`SwitchCompat`或`Switch`组件,它位于`androidx....