为什么80%的码农都做不了架构师?>>>   

来说说今天的战绩吧,说是战绩,是因为今天写代码时效率挺高,可能是因为集中精力吧,所以,如果要写好程序的话,最好满足以下两点:
 1、写程序前想好画好步骤图;
 2、集中精力,别一心二用;
 
   然后来看看今天要说的,就是下面这个小功能,能够快速增加减小文本框里的值,这里看似简单,但在过程中也遇到了几个问题,下面就一一来说。

1、最主要的问题:长按事件并不是我们想要的

findViewById(R.id.test).setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {Log.e("", "onLongClick");return true;}});

长按着test按钮,你会发现,控制台并不会一直打印出onLongClick,这也没什么奇怪的OnLongClickListener只是长按后出发的一个事件,这个事件一直到松开手,在按下,长按,松手这个
 过程只会触发OnLongClickListener一次,你想啊,用过智能机的都知道,长按文件夹移动,文件夹会跟着你跑,如果会触发很多次,那不是会弹出很多个文件夹来吗。。。
 
   所以,要实现长按让它连续加减值,OnLongClickListener事件对我们是没用的,在android有个onTouch(View v, MotionEvent event)事件,它有两个参数View v, MotionEvent event,相信大家都知道这是什么意思,所以。。。。  有想法了没,哈哈
 
   在这里贴上主要代码:

//Touch事件class CompentOnTouch implements OnTouchListener {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (v.getId()) {//这是btnMius下的一个层,为了增强易点击性case R.id.linearBtnMius:onTouchChange("mius", event.getAction());break;//这里也写,是为了增强易点击性case R.id.btnMius:onTouchChange("mius", event.getAction());break;case R.id.linearBtnPlus:onTouchChange("plus", event.getAction());break;case R.id.btnPlus:onTouchChange("plus", event.getAction());break;}return true;}}private void onTouchChange(String methodName, int eventAction) {//按下松开分别对应启动停止减线程方法if ("mius".equals(methodName)) {if (eventAction == MotionEvent.ACTION_DOWN) {miusThread = new MiusThread();isOnLongClick = true;miusThread.start();} else if (eventAction == MotionEvent.ACTION_UP) {if (miusThread != null) {isOnLongClick = false;}} else if (eventAction == MotionEvent.ACTION_MOVE) {if (miusThread != null) {isOnLongClick = true;}}}//按下松开分别对应启动停止加线程方法else if ("plus".equals(methodName)) {if (eventAction == MotionEvent.ACTION_DOWN) {plusThread = new PlusThread();isOnLongClick = true;plusThread.start();} else if (eventAction == MotionEvent.ACTION_UP) {if (plusThread != null) {isOnLongClick = false;}} else if (eventAction == MotionEvent.ACTION_MOVE) {if (plusThread != null) {isOnLongClick = true;}}}}//减操作class MiusThread extends Thread {@Overridepublic void run() {while (isOnLongClick) {try {Thread.sleep(200);myHandler.sendEmptyMessage(1);} catch (InterruptedException e) {e.printStackTrace();}super.run();}}}//加操作class PlusThread extends Thread {@Overridepublic void run() {while (isOnLongClick) {try {Thread.sleep(200);myHandler.sendEmptyMessage(2);} catch (InterruptedException e) {e.printStackTrace();}super.run();}}}//更新文本框的值Handler myHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case 1:if (miusEnable) {buttonHolder.input.setText((new BigDecimal(buttonHolder.input.getText().toString()).subtract(new BigDecimal("0.1")))+ "");}break;case 2:if (plusEnable) {buttonHolder.input.setText((new BigDecimal(buttonHolder.input.getText().toString()).add(new BigDecimal("0.1")))+ "");}break;}setBtnEnable();};};//超出最大最小值范围按钮的可能与不可用private void setBtnEnable() {if (new BigDecimal(buttonHolder.input.getText().toString()).compareTo(new BigDecimal(minvalue + "")) > 0) {miusEnable = true;buttonHolder.btnMius.setBackgroundResource(R.drawable.nurse_symp_mius);} else {miusEnable = false;buttonHolder.btnMius.setBackgroundResource(R.drawable.nurse_symp_mius_max);}if (new BigDecimal(buttonHolder.input.getText().toString()).compareTo(new BigDecimal(maxvalue + "")) < 0) {plusEnable = true;buttonHolder.btnPlus.setBackgroundResource(R.drawable.nurse_symp_plus);} else {plusEnable = false;buttonHolder.btnPlus.setBackgroundResource(R.drawable.nurse_symp_plus_max);}}

看完上面代码你一定会觉得,怎么没有单击事件,我单击也可以增加减小文本框的值嘛,哈哈,单击事件已经合并在Touch事件里啦,单击也是要按下弹起的不是么,至此最大的问题就解决了,这个还有个小问题,因为文本框里的值都是小数,如果你直接35.5-0.1,35.5-0.2,35.5-0.3  ... ...,你会发现会得到类似35.29999999904这些类似的情况,这里大概是因为计算机进行二进制分数运算时,造成了不够精度的bug,这里,我们可以使用BigDecimal,它是java专门用于解决大小数(大分数)的一个类,它支持任何精度的定点数,因此,我们的加减法可以写成:

buttonHolder.input.setText((new BigDecimal(buttonHolder.input.getText().toString()).subtract(new BigDecimal("0.1")))+ "");buttonHolder.input.setText((new BigDecimal(buttonHolder.input.getText().toString()).add(new BigDecimal("0.1")))+ "");

  我的博客的其他文章列表
  http://my.oschina.net/helu

转载于:https://my.oschina.net/helu/blog/141731

android文本框左右加减按钮长按一直加减相关推荐

  1. Android文本框示例

    在Android中,您可以使用" EditText "类创建一个可编辑的文本框,以接受用户输入. 本教程向您展示如何在XML文件中创建文本框,并演示如何使用键侦听器来显示在文本框中 ...

  2. 添加删除按钮html代码怎么写,JavaScript添加一个文本框并带有删除按钮

    JavaScript添加一个文本框并带有删除按钮属于前端实例代码,有关更多实例代码大家可以查看. 实际操作中可能需要动态的创建和删除一个元素,比较常见是添加一个文本框和一个删除按钮,点击删除按钮可以删 ...

  3. 按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行

    按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行 ` package p1; import java.awt.* ...

  4. java如何创建一个文本框_创建一个有文本框和三个按钮的程序。当按下某个按钮时,使不同的文字(Java..._考试资料网...

    问答题创建一个有文本框和三个按钮的程序.当按下某个按钮时,使不同的文字("Java","编程","不难学")显示在文本框中.已经给出部分代码 ...

  5. android 文本框(textview)左右滑动

    实现android文本框的触摸左右滑动,不需要自定自定义什么的,直接textview就自带了,如下(以左右滑动为列子): 布局文件中定义(事实上这个布局里只配置maxLines 就可以了): < ...

  6. php怎么把文本框的边框去掉,如何在文本框中设置清除按钮

    有时我们会看到在文本框中的右边会有一个圆圈里面有个×,这其实就是清除按钮,那么如何在文本框中来实现这个清除按钮呢?接下来的这篇文章就来给大家介绍关于在文本框中设置清除按钮的方法. 我们先来看一下设置清 ...

  7. android 点击文本框,android 文本框部分文字的点击事件

    转载请标明出处. android文本框部分文字点击事件. String text1 = "这是个例子"; String text2 = "点击的文字"; Spa ...

  8. html文本框连接数据库失败,从按钮点击将数据从MySQL数据库加载到HTML文本框

    我使用PHP加载服务ID s到下拉框.当用户点击按钮时,应该在下面的文本框中显示与该ID相关的其他详细信息. 这是我到目前为止的代码. //Database initialization requir ...

  9. html文本框后面加一个按钮怎么对齐,怎样对齐文本框和图像(image)按钮实现三点一线...

    一个文本框旁边一个按钮是很经常用到的网页内容,比如搜索框等等,而如果旁边的按钮使用图像的话,他们竖直方向就很不容易对齐,即使使用 vertical-align.padding和margin等都不行(特 ...

最新文章

  1. 基于php下载文件的详解
  2. python中的浅拷贝和深拷贝
  3. #3027. [Ceoi2004]Sweet 生成函数 + 组合数学
  4. 鸿蒙系统定位低端市场,明年年初见!鸿蒙系统会先定位中低端,后续全面升级...
  5. 为什么 Kubernetes 是微服务发展的必然产物?
  6. SQL Server 2012基本介绍
  7. C++实现一个基于mfc的学生信息管理系统
  8. Matlab控制器设计app(controlSystemDesigner)的使用
  9. selenium+python+eclipse 实现 “问卷星”网站,登录与检查登录示例!
  10. 根据读取数据库字段去linux下载文件到本地
  11. Docker从入门到精通
  12. eNSP解决OSPF不规则区域几个方法和vlink-peer
  13. 如何使用VLC媒体播放软件下载网页上视频?
  14. XJTU第八周大计基编程作业
  15. 基于AT89C51单片机的智能浇花系统设计
  16. 全面回顾2022年加密行业大事件:破后而立方能绝处逢生
  17. Visual Studio 2017无法验证许可证状态、登陆报错the broswer based authentication dialog failed to complete-亲测可行
  18. alsa-util常用命令介绍
  19. SSM框架自学(四)——Maven项目管理工具快速入门
  20. acl中的反掩码,acl掩码匹配规则

热门文章

  1. java 电池类类代码举例_教案:Java第7章 类的方法
  2. 环境加密--SDC沙盒防泄密系统
  3. 山穷水尽疑无路,柳岸花明又一村
  4. android mp4添加滤镜,Android 视频外部滤镜:挂件、贴纸,或美颜效果
  5. trackingmore快递查询平台_国际快递查询app下载-Trackingmore 安卓版v1.7.4-PC6安卓网
  6. 维纳—辛钦(Winner-Khitchine)定理的证明
  7. mix3信号测试软件,信号才是手机的基础,小米MIX3面临三个信号难题,它做了什么?...
  8. Excel 处理技巧 (二)
  9. 7.RTT-HWTIMER 设备
  10. C语言:判断一个数是否是完数?