1、先上图看下效果
2、基本需求
2.1、玩家凭个人感觉长按点击区域,大概1秒时松开,系统会检测本次时间;
2.2、如果时间误差在0.1秒内(超过0.1秒或差0.1秒)均记录“大神”1次,否则记录“凡人”1次;
2.3、“大神”1次以红色显示,突出效果;
3、主要技术点
3.1、相对布局加线性布局,整体使用相对布局,中间按钮部分使用线性布局;
3.2、中间长按区域不是按钮,是一个布局(可以看成是一个View),并且绑定onTouch事件;
3.3、普通View要实现Touch事件必须加上属性android:clickable=”true”,否则只能TouchDown,其他均无法响应;
3.4、“按钮”上有两行文字,必要的时候只显示一行,2行时平分,1行是居中;
3.5、android:visibility=”xxx”,xxx有三个枚举值分别为:gone、visible、invisible;
4、关键代码
XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0096FA" tools:context="com.yusian.onesecond.MainActivity"> <TextView android:id="@+id/tv_tag" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40sp" android:text="你的一秒钟\n有多长?" android:gravity="center" android:layout_centerHorizontal="true" android:layout_marginTop="30dp" android:textColor="@color/sa_yellow"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="How long is your one second" android:layout_below="@id/tv_tag" android:layout_centerInParent="true" android:layout_marginTop="20dp" android:textSize="20sp" android:textColor="#FFFFFF"/> <LinearLayout android:id="@+id/ll_btn" android:layout_width="match_parent" android:layout_height="60dp" android:background="#CCCCCC" android:layout_centerInParent="true" android:layout_margin="10dp" android:gravity="center" android:clickable="true" android:orientation="vertical"> <TextView android:id="@+id/ll_btn_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按住开始" android:textSize="18sp"/> <TextView android:id="@+id/ll_btn_tag" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="碉堡了,少侠你是大神" android:visibility="visible" android:textColor="#FFFFFF" android:textSize="15sp"/> </LinearLayout> <TextView android:id="@+id/tv_normal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="凡人:0" android:textSize="18sp" android:layout_centerHorizontal="true" android:layout_below="@id/ll_btn" android:textColor="@color/sa_yellow" android:layout_marginTop="20dp"/> <TextView android:id="@+id/tv_god" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_normal" android:layout_centerHorizontal="true" android:layout_margin="10dp" android:textSize="18sp" android:text="大神:0" android:textColor="@color/sa_yellow"/> </RelativeLayout> |
Activity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package com.yusian.onesecond; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import java.text.DecimalFormat; import static java.lang.Math.abs; public class MainActivity extends AppCompatActivity { private LinearLayout ll_btn; long touchDownTime, touchUpTime; int godCount, normalCount; TextView tv_god, tv_normal, ll_btn_time, ll_btn_tag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findView(); } /*初始化基础控件及引用*/ private void findView() { tv_god = (TextView)findViewById(R.id.tv_god); tv_normal = (TextView)findViewById(R.id.tv_normal); ll_btn_time = (TextView)findViewById(R.id.ll_btn_time); ll_btn_tag = (TextView)findViewById(R.id.ll_btn_tag); ll_btn = (LinearLayout) findViewById(R.id.ll_btn); ll_btn.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { System.out.println(String.valueOf(event.getAction())); int even = event.getAction(); // 按下去的时候 if (even == MotionEvent.ACTION_DOWN){ touchDownTime = System.currentTimeMillis(); v.setBackgroundColor(Color.YELLOW); ll_btn_time.setText("正在按下"); ll_btn_time.setTextColor(Color.BLACK); ll_btn_tag.setVisibility(View.GONE); } // 抬起来的时候 if (even == MotionEvent.ACTION_UP){ touchUpTime = System.currentTimeMillis(); calculate(); } return false; } }); } /*判断时间计算*/ private void calculate(){ long pressTime = touchUpTime - touchDownTime; if (pressTime == 0) return; DecimalFormat decimal = new DecimalFormat("0.000"); ll_btn_time.setText(decimal.format(pressTime * 0.001) + "秒"); if (abs(pressTime - 1000) > 100){ normalCount ++; ll_btn.setBackgroundColor(Color.rgb(204, 204, 204)); ll_btn_time.setTextColor(Color.BLACK); ll_btn_tag.setVisibility(View.GONE); tv_normal.setText("凡人:" + normalCount); }else{ godCount ++; ll_btn.setBackgroundColor(Color.rgb(200, 0, 0)); ll_btn_time.setTextColor(Color.WHITE); ll_btn_tag.setVisibility(View.VISIBLE); tv_god.setText("大神:" + godCount); } } } |