Androidstudio如何制作一个高仿小米计算器小demo

Androidstudio如何制作一个高仿小米计算器小demo

————安德风

一、最终成品效果图:

二、界面设计布局源代码:文件名activity_main.xml

(存放在jsj(我的模块名为jsj)/res/layout/activity_main.xml)

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3     xmlns:app="http://schemas.android.com/apk/res-auto"
  4     xmlns:tools="http://schemas.android.com/tools"
  5     android:layout_width="match_parent"
  6     android:layout_height="match_parent"
  7     android:orientation="vertical"
  8     tools:context="com.example.jsj.MainActivity" >
  9
 10     <EditText
 11         android:id="@+id/EV_Result"
 12         android:layout_width="match_parent"
 13         android:layout_height="209dp"
 14         android:ems="10"
 15         android:gravity="right|bottom"
 16         android:inputType="textPersonName"
 17         android:paddingRight="30dp"
 18         android:paddingBottom="30dp"
 19         android:text="0"
 20         android:textSize="60sp" />
 21
 22     <LinearLayout
 23         android:layout_width="match_parent"
 24         android:layout_height="wrap_content"
 25         android:orientation="vertical"/>
 26
 27     <LinearLayout
 28         android:layout_width="match_parent"
 29         android:layout_height="wrap_content"
 30         android:orientation="horizontal">
 31
 32         <Button
 33             android:id="@+id/Btn_C"
 34             android:layout_width="98dp"
 35             android:layout_height="100dp"
 36             android:background="@drawable/border2"
 37             android:text="C"
 38             android:textColor="#FF5722"
 39             android:textSize="40sp" />
 40
 41         <Button
 42             android:id="@+id/Btn_Back"
 43             android:layout_width="wrap_content"
 44             android:layout_height="100dp"
 45             android:layout_weight="1"
 46             android:background="@drawable/border2"
 47             android:text="Del"
 48             android:textSize="40sp" />
 49
 50         <Button
 51             android:id="@+id/Btn_Division"
 52             android:layout_width="wrap_content"
 53             android:layout_height="100dp"
 54             android:layout_weight="1"
 55             android:background="@drawable/border2"
 56             android:text="/"
 57             android:textSize="40sp" />
 58
 59         <Button
 60             android:id="@+id/Btn_Multiplication"
 61             android:layout_width="wrap_content"
 62             android:layout_height="100dp"
 63             android:layout_weight="1"
 64             android:background="@drawable/border2"
 65             android:text="*"
 66             android:textSize="40sp" />
 67
 68     </LinearLayout>
 69
 70     <LinearLayout
 71         android:layout_width="match_parent"
 72         android:layout_height="wrap_content"
 73         android:orientation="horizontal">
 74
 75         <Button
 76             android:id="@+id/Btn_Num7"
 77             android:layout_width="wrap_content"
 78             android:layout_height="100dp"
 79             android:layout_weight="1"
 80             android:background="@drawable/border2"
 81             android:text="7"
 82             android:textSize="40sp" />
 83
 84         <Button
 85             android:id="@+id/Btn_Num8"
 86             android:layout_width="wrap_content"
 87             android:layout_height="100dp"
 88             android:layout_weight="1"
 89             android:background="@drawable/border2"
 90             android:text="8"
 91             android:textSize="40sp" />
 92
 93         <Button
 94             android:id="@+id/Btn_Num9"
 95             android:layout_width="wrap_content"
 96             android:layout_height="100dp"
 97             android:layout_weight="1"
 98             android:background="@drawable/border2"
 99             android:text="9"
100             android:textSize="40sp" />
101
102         <Button
103             android:id="@+id/Btn_Subtraction"
104             android:layout_width="wrap_content"
105             android:layout_height="100dp"
106             android:layout_weight="1"
107             android:background="@drawable/border2"
108             android:text="-"
109             android:textSize="40sp" />
110
111     </LinearLayout>
112
113     <LinearLayout
114         android:layout_width="match_parent"
115         android:layout_height="wrap_content"
116         android:orientation="horizontal">
117
118         <Button
119             android:id="@+id/Btn_Num4"
120             android:layout_width="wrap_content"
121             android:layout_height="100dp"
122             android:layout_weight="1"
123             android:background="@drawable/border2"
124             android:text="4"
125             android:textSize="40sp" />
126
127         <Button
128             android:id="@+id/Btn_Num5"
129             android:layout_width="wrap_content"
130             android:layout_height="100dp"
131             android:layout_weight="1"
132             android:background="@drawable/border2"
133             android:text="5"
134             android:textSize="40sp" />
135
136         <Button
137             android:id="@+id/Btn_Num6"
138             android:layout_width="wrap_content"
139             android:layout_height="100dp"
140             android:layout_weight="1"
141             android:background="@drawable/border2"
142             android:text="6"
143             android:textSize="40sp" />
144
145         <Button
146             android:id="@+id/Btn_Addition"
147             android:layout_width="wrap_content"
148             android:layout_height="100dp"
149             android:layout_weight="1"
150             android:background="@drawable/border2"
151             android:text="+"
152             android:textSize="40sp" />
153     </LinearLayout>
154
155     <LinearLayout
156         android:layout_width="match_parent"
157         android:layout_height="wrap_content"
158         android:orientation="horizontal">
159
160         <Button
161             android:id="@+id/Btn_Num1"
162             android:layout_width="wrap_content"
163             android:layout_height="100dp"
164             android:layout_weight="1"
165             android:background="@drawable/border2"
166             android:text="1"
167             android:textSize="40sp" />
168
169         <Button
170             android:id="@+id/Btn_Num2"
171             android:layout_width="wrap_content"
172             android:layout_height="100dp"
173             android:layout_weight="1"
174             android:background="@drawable/border2"
175             android:text="2"
176             android:textSize="40sp" />
177
178         <Button
179             android:id="@+id/Btn_Num3"
180             android:layout_width="wrap_content"
181             android:layout_height="100dp"
182             android:layout_weight="1"
183             android:background="@drawable/border2"
184             android:text="3"
185             android:textSize="40sp" />
186
187         <Button
188             android:id="@+id/Btn_Num0"
189             android:layout_width="wrap_content"
190             android:layout_height="100dp"
191             android:layout_weight="1"
192             android:background="@drawable/border2"
193             android:text="0"
194             android:textSize="40sp" />
195     </LinearLayout>
196
197     <LinearLayout
198         android:layout_width="match_parent"
199         android:layout_height="111dp"
200         android:orientation="horizontal">
201
202         <Button
203             android:id="@+id/Btn_ModuloDivision"
204             android:layout_width="98dp"
205             android:layout_height="match_parent"
206             android:layout_weight="0"
207             android:background="@drawable/border2"
208             android:text="%"
209             android:textSize="40sp" />
210
211         <Button
212             android:id="@+id/Btn_DecimalPoint"
213             android:layout_width="98dp"
214             android:layout_height="match_parent"
215             android:layout_weight="0"
216             android:background="@drawable/border2"
217             android:text="."
218             android:textSize="40sp" />
219
220         <Button
221             android:id="@+id/Btn_Equal"
222             android:layout_width="160dp"
223             android:layout_height="match_parent"
224             android:layout_weight="1"
225             android:background="@drawable/border"
226             android:text="="
227             android:textColor="#FDFDFD"
228             android:textSize="40sp" />
229     </LinearLayout>
230 </LinearLayout>

三、按钮设置边框以及点击颜色切换效果(这里我在res/drawable中建立了两个文件:
分别为 border.xml 用来改变“=”边框以及按钮效果,border.xml 用来改变普通按钮边框以及按钮效果)

1、border.xml源代码(“=”按钮特效)

 1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 2     <item android:state_pressed="true" >
 3         <shape>
 4             <solid
 5                 android:color="#FF5722" />//设置按钮响应颜色
 6             <stroke
 7                 android:width="3dp"
 8                 android:color="#C3C3C3" />//设置按钮响应外边框颜色
 9             <corners
10                 android:radius="0dp" />
11             <padding
12                 android:left="5dp"
13                 android:top="5dp"
14                 android:right="5dp"
15                 android:bottom="5dp" />
16         </shape>
17     </item>
18     <item>
19         <shape>
20             <gradient
21                 android:startColor="#FF7421"
22                 android:endColor="#FF7421"
23                 android:centerColor="#FF7421"
24                 android:angle="270" />
25             <stroke
26                 android:width="1dp"
27                 android:color="#A0A0A0" />//设置外边框颜色
28             <corners
29                 android:radius="0dp" />
30             <padding
31                 android:left="5dp"
32                 android:top="5dp"
33                 android:right="5dp"
34                 android:bottom="5dp" />
35         </shape>
36     </item>
37 </selector>

2、border2.xml源代码

 1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 2     <item android:state_pressed="true" >
 3         <shape>
 4             <solid
 5                 android:color="#C6CBC9" />//设置按钮响应颜色
 6             <stroke
 7                 android:width="3dp"
 8                 android:color="#C3C3C3" />//设置按钮响应外边框颜色
 9             <corners
10                 android:radius="0dp" />
11             <padding
12                 android:left="5dp"
13                 android:top="5dp"
14                 android:right="5dp"
15                 android:bottom="5dp" />
16         </shape>
17     </item>
18     <item>
19         <shape>
20             <gradient
21                 android:startColor="#FFFFFF"/>//设置按钮内部上半部分颜色(可以做渐变颜色)
22             android:endColor="#FFFFFF"/>//设置按钮内部下半部分颜色(可以做渐变颜色)
23             android:angle="270" />
24             <stroke
25                 android:width="1dp"
26                 android:color="#A0A0A0" />//设置外边框颜色
27             <corners
28                 android:radius="0dp" />
29             <padding
30                 android:left="5dp"
31                 android:top="5dp"
32                 android:right="5dp"
33                 android:bottom="5dp" />
34         </shape>
35     </item>
36 </selector>

四、设置隐藏导航栏以及状态栏源代码(在jsj/res/values/style.xml中设置)

 1 <resources>
 2
 3     <!-- Base application theme. -->
 4     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5         <!-- Customize your theme here. -->
 6         <item name="colorPrimary">@color/colorPrimary</item>
 7         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8         <item name="colorAccent">@color/colorAccent</item>
 9         <!--隐藏标题栏-->
10         <item name="windowNoTitle">true</item>
11         <!--隐藏状态栏-->
12         <item name="android:windowFullscreen">false</item>
13     </style>
14
15 </resources>

五、设置导航栏以及状态栏中的颜色设置源代码(在jsj/res/values/color.xml中设置)

1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <!--    <color name="colorPrimary">#6200EE</color>-->
4 <!--    <color name="colorPrimaryDark">#3700B3</color>-->
5     <color name="colorAccent">#03DAC5</color>
6
7     <color name="colorPrimary">#EDEEEE</color>
8     <color name="colorPrimaryDark">#EDEEEE</color>
9 </resources>

六、实现计算器主要功能文件MainActivity.java该文件存路径:

源代码:

  1 package com.example.jsj;
  2
  3 import android.os.Bundle;
  4 import android.util.Log;
  5 import android.view.View;
  6 import android.widget.Button;
  7 import android.widget.EditText;
  8
  9 import androidx.appcompat.app.AppCompatActivity;
 10
 11 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 12
 13     private EditText EV_Result; // 结果框
 14     private double currentResult = 0.0;  // 存储数字及结果
 15     private boolean firstDigit = true;  // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
 16     private String operator = "=";  // 当前运算的运算符
 17     private boolean operateValidFlag = true;  // 操作是否合法
 18
 19     @Override
 20     protected void onCreate(Bundle savedInstanceState) {
 21         super.onCreate(savedInstanceState);
 22         setContentView(R.layout.activity_main);
 23         // 控件初始化及添加监听事件
 24         this.init();
 25     }
 26
 27     /**
 28      * 点击事件重载方法
 29      * @param v 当前点击的控件
 30      */
 31     @Override
 32     public void onClick(View v) {
 33         String pre = ((Button) v).getText().toString();
 34         Log.i("TAG", pre);
 35         switch (v.getId()) {
 36             case R.id.Btn_Back:
 37                 setBtn_Back();
 38                 break;
 39             case R.id.Btn_C:
 40                 setBtn_C();
 41                 break;
 42             case R.id.Btn_Num0:
 43             case R.id.Btn_Num1:
 44             case R.id.Btn_Num2:
 45             case R.id.Btn_Num3:
 46             case R.id.Btn_Num4:
 47             case R.id.Btn_Num5:
 48             case R.id.Btn_Num6:
 49             case R.id.Btn_Num7:
 50             case R.id.Btn_Num8:
 51             case R.id.Btn_Num9:
 52             case R.id.Btn_DecimalPoint:
 53                 setNum(pre);
 54                 break;
 55             case R.id.Btn_Subtraction:
 56             case R.id.Btn_Addition:
 57             case R.id.Btn_ModuloDivision:
 58             case R.id.Btn_Multiplication:
 59             case R.id.Btn_Division:
 60             case R.id.Btn_Equal:
 61                 setOperator(pre);
 62                 break;
 63         }
 64     }
 65
 66     /**
 67      * 点击运算符处理
 68      * @param label 接收当前点击的运算符
 69      */
 70     public void setOperator(String label) {
 71         switch (operator){
 72             case "/":
 73                 // 除法运算
 74                 // 如果当前结果文本框中的值等于0
 75                 if (getNumFromEV_Result() == 0.0) {
 76                     // 操作不合法
 77                     operateValidFlag = false;
 78                     EV_Result.setText("除数不能为零!");
 79                 } else {
 80                     currentResult /= getNumFromEV_Result();
 81                 }
 82                 break;
 83             case "+":
 84                 // 加法运算
 85                 currentResult += getNumFromEV_Result();
 86                 break;
 87             case "-":
 88                 // 减法运算
 89                 currentResult -= getNumFromEV_Result();
 90                 break;
 91             case "*":
 92                 // 加法运算
 93                 currentResult *= getNumFromEV_Result();
 94                 break;
 95             case "%":
 96                 // 加法运算
 97                 currentResult %= getNumFromEV_Result();
 98                 break;
 99             case "=":
100                 // 赋值运算
101                 currentResult = getNumFromEV_Result();
102                 break;
103         }
104         if (operateValidFlag) {
105             // 双精度浮点数的运算
106             long t1;
107             double t2;
108             t1 = (long) currentResult;
109             t2 = currentResult - t1;
110             if (t2 == 0) {
111                 EV_Result.setText(String.valueOf(t1));
112             } else {
113                 EV_Result.setText(String.valueOf(currentResult));
114             }
115         }
116         // 运算符等于用户按的按钮
117         operator = label;
118         firstDigit = true;
119         operateValidFlag = true;
120     }
121
122     /**
123      * 点击数字处理
124      * @param n 接收当前点击的数字
125      */
126     public void setNum(String n) {
127         if (firstDigit) {
128             // 输入的第一个数字
129             EV_Result.setText(n);
130         } else if ((n.equals(".")) && (!EV_Result.getText().toString().contains("."))) {
131             // 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
132             String str = EV_Result.getText().toString();
133             str += ".";
134             EV_Result.setText(str);
135         } else if (!n.equals(".")) {
136             // 如果输入的不是小数点,则将数字附在结果文本框的后面
137             String str = EV_Result.getText().toString();
138             str += n;
139             EV_Result.setText(str);
140         }
141         // 以后输入的肯定不是第一个数字了
142         firstDigit = false;
143     }
144
145     /**
146      * 从文本框中获取数字
147      *
148      * @return result
149      */
150     public double getNumFromEV_Result() {
151         double result = 0;
152         try {
153             result = Double.valueOf(EV_Result.getText().toString());
154         } catch (NumberFormatException e) {
155             Log.i("TAG","您输入的不是数字");
156         }
157         return result;
158     }
159
160     /**
161      * 设置清空C键
162      */
163     public void setBtn_C() {
164         EV_Result.setText("0");
165         firstDigit = true;
166         operator = "=";
167     }
168
169     /**
170      * 设置返回Back键
171      */
172     public void setBtn_Back() {
173         String currentResult = EV_Result.getText().toString();
174         int i = currentResult.length();
175         if (i > 0) {
176             currentResult = currentResult.substring(0, i - 1);  // 将文本最后一个字符去掉
177             if (currentResult.length() == 0) {  // 如果没有了内容,初始化计算器的各种值
178                 EV_Result.setText("0");
179             } else {
180                 EV_Result.setText(currentResult);  // 显示新的文本
181             }
182         }
183     }
184
185     /**
186      * 初始化控件
187      */
188     public void init() {
189         EV_Result = findViewById(R.id.EV_Result);
190
191         // 第一行
192         Button Btn_C;  // 清空结果框
193         Button Btn_Back;  // 返回
194         Button Btn_ModuloDivision;  // 模除
195         Button Btn_Division; // 除法
196         // 第二行
197         Button Btn_Num7;
198         Button Btn_Num8;
199         Button Btn_Num9;
200         Button Btn_Multiplication;  // 乘发
201         // 第三行
202         Button Btn_Num4;
203         Button Btn_Num5;
204         Button Btn_Num6;
205         Button Btn_Subtraction;  // 减法
206         // 第四行
207         Button Btn_Num1;
208         Button Btn_Num2;
209         Button Btn_Num3;
210         Button Btn_Addition;  // 加法
211         // 第五行
212         Button Btn_Num0;
213         Button Btn_DecimalPoint;  // 小数点
214         Button Btn_Equal;  // 等于
215         Btn_C = findViewById(R.id.Btn_C);
216         Btn_Back = findViewById(R.id.Btn_Back);
217         Btn_ModuloDivision = findViewById(R.id.Btn_ModuloDivision);
218         Btn_Division = findViewById(R.id.Btn_Division);
219
220         Btn_Num7 = findViewById(R.id.Btn_Num7);
221         Btn_Num8 = findViewById(R.id.Btn_Num8);
222         Btn_Num9 = findViewById(R.id.Btn_Num9);
223         Btn_Multiplication = findViewById(R.id.Btn_Multiplication);
224
225         Btn_Num4 = findViewById(R.id.Btn_Num4);
226         Btn_Num5 = findViewById(R.id.Btn_Num5);
227         Btn_Num6 = findViewById(R.id.Btn_Num6);
228         Btn_Subtraction = findViewById(R.id.Btn_Subtraction);
229
230         Btn_Num1 = findViewById(R.id.Btn_Num1);
231         Btn_Num2 = findViewById(R.id.Btn_Num2);
232         Btn_Num3 = findViewById(R.id.Btn_Num3);
233         Btn_Addition = findViewById(R.id.Btn_Addition);
234
235         Btn_Num0 = findViewById(R.id.Btn_Num0);
236         Btn_DecimalPoint = findViewById(R.id.Btn_DecimalPoint);
237         Btn_Equal = findViewById(R.id.Btn_Equal);
238
239         Btn_C.setOnClickListener(this);
240         Btn_Back.setOnClickListener(this);
241         Btn_ModuloDivision.setOnClickListener(this);
242         Btn_Division.setOnClickListener(this);
243         Btn_Num7.setOnClickListener(this);
244         Btn_Num8.setOnClickListener(this);
245         Btn_Num9.setOnClickListener(this);
246         Btn_Multiplication.setOnClickListener(this);
247         Btn_Num4.setOnClickListener(this);
248         Btn_Num5.setOnClickListener(this);
249         Btn_Num6.setOnClickListener(this);
250         Btn_Subtraction.setOnClickListener(this);
251         Btn_Num1.setOnClickListener(this);
252         Btn_Num2.setOnClickListener(this);
253         Btn_Num3.setOnClickListener(this);
254         Btn_Addition.setOnClickListener(this);
255         Btn_Num0.setOnClickListener(this);
256         Btn_DecimalPoint.setOnClickListener(this);
257         Btn_Equal.setOnClickListener(this);
258     }
259
260 }

七、总结

最后声明一下,我的项目文件模块名(module)是jsj,大家在做的时候记得更改一下,还有实现功能的时候按钮控件ID最好与声明的控件变量一致方便与修改。还有一点建立界面布局时采用EditText文本控件(输入文本框),不要采用TextView。否则后面在实际模拟器运行时会,
无法正常运行,强制退出,模拟器会出现 keeps stopping ,表示你计算器MainActivity.java 文件中,方法或者变量出现错误。

以上总结的是我在编写中常出现的错误,希望能给大家带来帮助。感谢大家关注,有问题欢迎在下方留言。看到后我会一一解答。

原文地址:https://www.cnblogs.com/adf520/p/12444236.html

时间: 2024-10-07 06:47:42

Androidstudio如何制作一个高仿小米计算器小demo的相关文章

AndroidStudio制作一个简易的订餐交易小demo【日常小练习】

AndroidStudio模拟制作一个简易的订餐交易小demo[日常小练习]     ————安德风 一.最终效果图: 二.布局设计activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/a

如何使用AEditor制作一个简单的H5交互页demo

转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个简单的H5交互页demo: 交互页demo地址: 点击打开H5交互页demo AEditor访问地址: http://aeditor.alloyteam.com Step1:设置页面背景颜色 首先我们设置页面的背景颜色,右击舞台点击“设置背景”: 然后在背景颜色中填上色值rgb(38, 61, 10

[如何让高仿小米3手机露出狐狸尾巴]

找来找去,觉得新出的小米3还可以,就在taobao上买了一台,到货后粗略看了下跟真的一样,就没太在意是否为假货,也就没有进入软件去确认一下,就这么一个偷懒,成了悲剧:买到高仿机了.发现过程:相机无法拍照,提示存储空间不够.进入设置中查看存储,发现内部存储空间总容量约为12G,实际数据不到3G,而其他则占将近了9G之多!朋友,如果你的小米手机出现类似的情况,那么恭喜你,基本上可以判定也是高仿的……删除一个250M的视频文件后,除了实际数据显示相应减少了之外,其他部分大约也减少了700M,说明这里面

50、自定义View练习(四)高仿小米时钟-使用Camera和Matrix实现3D效果

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 本文出自:猴菇先生的博客 http://blog.csdn.net/qq_31715429/article/details/54668668 继续练习自定义View..毕竟熟才能生巧.一直觉得小米的时钟很精美,那这次就搞它~这次除了练习自定义View,还涉及到使用Camera和Matrix实现3D效果. 附上github地址: https://github.com/MonkeyMushroom/MiClockView 欢迎st

一个高仿闲鱼键自定义数字键盘特效

博客地址: http://www.jianshu.com/p/be68facfc4b8 仿造android端闲鱼发布选择价格数字键盘,自定义数字键盘 public class MyKeyBoardView extends KeyboardView { private Context mContext; private Keyboard mKeyBoard; public MyKeyBoardView(Context context, AttributeSet attrs) { super(con

iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)

大致花了一个月时间,利用各种空闲时间,将这个客户端实现了,在这里主要是想记录下,设计的大体思路以及实现过程中遇到的坑...... 这个项目的github地址:https://github.com/wzpziyi1/GroupPurchase 主要实现的功能,用UICollectionViewController展示团购数据,根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除,友盟分享的集成,利用UIView+AutoLayout写布局,实现地图定位.自定义大头针等 整个项

一个简单的socket通信小demo

写了一个socket的程序,可以和本地的服务器进行通信,要先和服务器建立链接,然后发送登录信息,验证成功,就可以和服务器通信了 1 页面截图 2 点击链接服务器,可以链接服务器,服务器的ip地址为:127.0.0.1 端口为 12345: 3 点击链接服务器之后,打印信息如下 4 点击登录,会向服务器发送登录信息: iam:zhangsan, 然后会客户端会显示登录成功 5 比如输入chongqingyoudian  6 在服务器控制台就能看到客户端发送的信息 客户端代码如下 1 // 2 //

浅谈android中只使用一个TextView实现高仿京东,淘宝各种倒计时

今天给大家带来的是只使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.近期公司一直加班也没来得及时间去整理,今天难得歇息想把这个分享给大家.只求共同学习,以及自己兴许的复习. 为什么会想到使用一个TextView来实现呢?由于近期公司在做一些优化的工作,当中就有一个倒计时样式,原来开发的这个控件的同事使用了多个TextView拼接在一起的.实现的代码冗余比較大.故此项目经理就说:小宏这个就交给你来优化了.而且还要保证有一定的扩展性,当时就懵逼了.不知道从何处開始

浅谈android中仅仅使用一个TextView实现高仿京东,淘宝各种倒计时

今天给大家带来的是仅仅使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.最近公司一直加班也没来得及时间去整理,今天难得休息想把这个分享给大家,只求共同学习,以及自己后续的复习.为什么会想到使用一个TextView来实现呢?因为最近公司在做一些优化的工作,其中就有一个倒计时样式,原来开发的这个控件的同事使用了多个TextView拼接在一起的,实现的代码冗余比较大,故此项目经理就说:小宏这个就交给你来优化了,并且还要保证有一定的扩展性,当时就懵逼了.不知道从何处开始