我尝试使用类似于aptyp建议的方法进行编码:
MainActivity.java:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{static long DELAY_TIME_INPUT = 500;static int INPUT_TYPE_NORMAL = 0;static int INPUT_TYPE_CAP = 1;static int INPUT_TYPE_NUM = 2;TextView txtMessage;int[] mAlphabetTable1 = new int[]{1, 3, 9, 25, 17, 11, 27, 19, 10, 26, 5, 7, 13, 29, 21, 15, 31, 23, 14, 30, 37, 39, 58, 45, 61, 53};int[] mSymbolTable1 = new int[]{2, 6, 4, 18, 36, 40, 50, 22, 38, 52, 54, 12};int[] mSpecialTable1 = new int[]{8, 16, 20, 24};// char[] mAlphabetTable2 = new char[]{};char[] mNumberTable2 = new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};char[] mSymbolTable2 = new char[]{',', ';', ''', ':','-', '.', '.', '!', '“', '”','(','/'};int mCurrentAlphabet = 0;int mCurrentInputType = 0;long mLastTimeStamp;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Window window = this.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); // Init GUI txtMessage = (TextView) findViewById(R.id.txtMesssage); Button buttonOne = (Button) findViewById(R.id.block1); Button buttonTwo = (Button) findViewById(R.id.block2); Button buttonThree = (Button) findViewById(R.id.block3); Button buttonFour = (Button) findViewById(R.id.block4); Button buttonFive = (Button) findViewById(R.id.block5); Button buttonSix = (Button) findViewById(R.id.block6); // Attached Click Listener buttonOne.setonClickListener(this); buttonTwo.setonClickListener(this); buttonThree.setonClickListener(this); buttonFour.setonClickListener(this); buttonFive.setonClickListener(this); buttonSix.setonClickListener(this);}@Overridepublic void onClick(View view) { switch (view.getId()){ case R.id.block1: mCurrentAlphabet |=1; break; case R.id.block2: mCurrentAlphabet |=2; break; case R.id.block3: mCurrentAlphabet |=4; break; case R.id.block4: mCurrentAlphabet |=8; break; case R.id.block5: mCurrentAlphabet |=16; break; case R.id.block6: mCurrentAlphabet |=32; break; } view.setBackgroundColor(Color.BLACK); Button btView = (Button) view; btView.setTextColor(Color.WHITE); mLastTimeStamp = System.currentTimeMillis(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { long currentTimeStamp = System.currentTimeMillis(); if(currentTimeStamp - mLastTimeStamp > DELAY_TIME_INPUT){ genNewBrailleAlphabet(); } } }, DELAY_TIME_INPUT + 10);}public void genNewBrailleAlphabet(){ if(mCurrentAlphabet == 32 || mCurrentAlphabet == 60){ // Check if input is Cap or Num sign? if(mCurrentAlphabet == 32){ // Input is Cap sign. mCurrentInputType = INPUT_TYPE_CAP; TextView txtCap = (TextView) findViewById(R.id.cap); txtCap.setBackgroundColor(Color.GREEN); } else { // Input is Num sign. TextView txtNum = (TextView) findViewById(R.id.num); if(mCurrentInputType == INPUT_TYPE_NUM){ mCurrentInputType = INPUT_TYPE_NORMAL; // Turn off Num sign. txtNum.setBackgroundColor(Color.TRANSPARENT); } else { mCurrentInputType = INPUT_TYPE_NUM; // Turn on Num sign. txtNum.setBackgroundColor(Color.GREEN); } } } else { // Input is not Cap or Num sign. byte currentAlphabetIndex = -1; char newAlphabet = 0; for (int i = 0; i < mAlphabetTable1.length; i++) { if (mAlphabetTable1[i] == mCurrentAlphabet) { currentAlphabetIndex = (byte) i; break; } } if(currentAlphabetIndex != -1) { // Check if input is Numbers or Alphabets? if (mCurrentInputType == INPUT_TYPE_NUM) { // Input is Numbers. if(currentAlphabetIndex < 10) { newAlphabet = mNumberTable2[currentAlphabetIndex]; } } else if (mCurrentInputType == INPUT_TYPE_CAP) // Input is Alphabets. newAlphabet = (char) (currentAlphabetIndex + 'A'); else newAlphabet = (char) (currentAlphabetIndex + 'a'); String msg = txtMessage.getText().toString() + newAlphabet; txtMessage.setText(msg); } else { // Input is not Numbers or Alphabets. for (int i = 0; i < mSymbolTable1.length; i++) { if (mSymbolTable1[i] == mCurrentAlphabet) { currentAlphabetIndex = (byte) i; break; } } if(currentAlphabetIndex != -1) { // Check if input is Punctuations? newAlphabet = mSymbolTable2[currentAlphabetIndex]; if(currentAlphabetIndex == 8){ // Open Quote, Question Mark have the same pattern. String tmpString = txtMessage.getText().toString(); if(tmpString.length() > 0 && !tmpString.endsWith(" ")){ // Last typed alphabet is not space, so this is Question Mark. newAlphabet = '?'; } } String msg = txtMessage.getText().toString() + newAlphabet; txtMessage.setText(msg); } else { // Input is not Punctuations, so it is Special Action or undefined. for (int i = 0; i < mSpecialTable1.length; i++) { if (mSpecialTable1[i] == mCurrentAlphabet) { currentAlphabetIndex = (byte) i; break; } } if(currentAlphabetIndex != -1) { // Check if input is Special Action? String msg = txtMessage.getText().toString(); // Input is Special Action switch (currentAlphabetIndex) { case 0: // Change focus here // Change focus pre break; case 1: // BackSpace msg = msg.substring(0, msg.length() - 1); txtMessage.setText(msg); break; case 2: // Space msg = msg + " "; txtMessage.setText(msg); break; case 3: // New Line msg = msg + "n"; break; } txtMessage.setText(msg); } else { // Input not defined. Toast.makeText(getApplicationContext(), "Clicked button combination not defined!!", Toast.LENGTH_SHORT).show(); } } } if(mCurrentInputType == INPUT_TYPE_CAP){ TextView txtCap = (TextView) findViewById(R.id.cap); txtCap.setBackgroundColor(Color.TRANSPARENT); mCurrentInputType = INPUT_TYPE_NORMAL; } } // Reset button views ana variable for next alphabet. Button buttonOne = (Button) findViewById(R.id.block1); Button buttonTwo = (Button) findViewById(R.id.block2); Button buttonThree = (Button) findViewById(R.id.block3); Button buttonFour = (Button) findViewById(R.id.block4); Button buttonFive = (Button) findViewById(R.id.block5); Button buttonSix = (Button) findViewById(R.id.block6); buttonOne.setBackgroundColor(Color.WHITE); buttonTwo.setBackgroundColor(Color.WHITE); buttonThree.setBackgroundColor(Color.WHITE); buttonFour.setBackgroundColor(Color.WHITE); buttonFive.setBackgroundColor(Color.WHITE); buttonSix.setBackgroundColor(Color.WHITE); buttonOne.setTextColor(Color.BLACK); buttonTwo.setTextColor(Color.BLACK); buttonThree.setTextColor(Color.BLACK); buttonFour.setTextColor(Color.BLACK); buttonFive.setTextColor(Color.BLACK); buttonSix.setTextColor(Color.BLACK); mCurrentAlphabet = 0;}}activity_main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ScrollView android:layout_weight="4.0" android:background="@color/lightgrey" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/txtMesssage" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:textColor="@color/darkbrown" > </TextView> </LinearLayout></ScrollView><LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:orientation="horizontal" android:baselineAligned="false" android:layout_marginTop="15dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#000000" android:orientation="vertical" > <TextView android:text="CAP" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/cap" android:layout_weight="1.3" android:gravity="center" android:textSize="20sp" /> <Button android:id="@+id/block1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#ffffff" android:text="Button one" /> <Button android:id="@+id/block2" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#ffffff" android:text="Button two" /> <Button android:id="@+id/block3" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#ffffff" android:text="Button three" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:orientation="vertical" android:background="#000000"> <TextView android:text="Num" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/num" android:layout_weight="1.3" android:gravity="center" android:textSize="20sp" /> <Button android:id="@+id/block4" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#ffffff" android:text="Button four" /> <Button android:id="@+id/block5" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#ffffff" android:text="Button five" /> <Button android:id="@+id/block6" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#ffffff" android:text="Button six" /> </LinearLayout></LinearLayout>
请注意,我使用的是处理程序,而不是计时器。希望对您有所帮助!


![Android:连续[一遍又一遍]轻按一到六个按钮,将不同的结果组合在一起 Android:连续[一遍又一遍]轻按一到六个按钮,将不同的结果组合在一起](http://www.mshxw.com/aiimages/31/496483.png)
