因為時間上的困難僅實現+-法
在手機app上實現7段顯示器的判斷模式判斷出兩個數字
並以書寫位置判斷符號,並於符號判斷成功時進行運算
以下是程式碼:
package com.example.numbertest;
import java.util.ArrayList;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
public class MainActivity extends ActionBarActivity {
public static final int menuClear = 1;
List<PointF> points = new ArrayList<PointF>();
Panel mPanel;
TextView question,answer;
int a[]={0,0,0,0,0,0,0},c[]={0,0,0,0,0,0,0},b=0,b_tmp[]={0,0,0,0},q1=0,q2=0;
int count=0;//筆畫數
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
/*
requestWindowFeature(Window.FEATURE_NO_TITLE);//隱藏標題
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//設置全屏
*/
setContentView(R.layout.activity_main);
mPanel = new Panel(this);
RelativeLayout tmp = (RelativeLayout)this.findViewById(R.id.iv);
tmp.addView(mPanel);
question = (TextView)findViewById(R.id.question);
answer = (TextView)findViewById(R.id.answer);
}
public boolean onCreateOptionsMenu(Menu menu) {
// menu.add 參數: (int groupId, int itemId, int order, int titleRes)
menu.add(0, menuClear, 0, "清除");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case menuClear:
question.setText("");
b=0;q1=0;q2=0;
points.clear();
mPanel.invalidate();
break;
}
return true;
}
class Panel extends View {
Paint mPaint = new Paint();
public Panel(Context context) {
super(context);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(5);
}
@Override
public void onDraw(Canvas canvas) {
for (int i=1; i<points.size();i++) {
PointF p1 = points.get(i-1);
PointF p2 = points.get(i);
if (Math.abs(p1.x - p2.x) < 40
&& Math.abs(p1.y - p2.y) < 40) {
canvas.drawLine(p1.x,p1.y, p2.x, p2.y, mPaint);
}
}
}
@Override
public boolean onTouchEvent(android.view.MotionEvent event) {
for (int i = 0; i < event.getHistorySize(); i++) {
points.add(new PointF(event.getHistoricalX(i), event.getHistoricalY(i)));
}
Panel.this.invalidate();
int iAction=event.getAction();
if(iAction==event.ACTION_UP)
{
Log.d(Float.toString(event.getX()),Float.toString(event.getY()));
if(count<2){
count++;
//按鍵放開 進行辨識 515 1120
String tmp="";
if(event.getX()<=515){
for(int k=0;k<7;k++)
tmp+=a[k];
q1 = checkAnswer(tmp);
question.setText("a: "+Integer.toString(q1));
}
else if(event.getX()>=1120){
for(int k=0;k<7;k++)
tmp+=c[k];
q2 = checkAnswer(tmp);
question.setText("c: "+Integer.toString(q2));
}
Log.d("!",tmp);
}
else{
for(int n=0;n<7;n++){
a[n]=0;
c[n]=0;
}
count=0;
}
if(event.getX()>=515&&event.getX()<=1120){
Log.d("B","B");
if(b_tmp[0]==1&&b_tmp[2]==1){
b=1;
b_tmp[0]=0;b_tmp[1]=0;b_tmp[2]=0;b_tmp[3]=0;
}else if(b_tmp[1]==1&&b_tmp[3]==1){
b=2;
}
else{
b=0;
}
}
if(b!=0){
Log.d("B","b");
if(b==1){
answer.setText(Integer.toString(q1+q2));
}else if(b==2){
answer.setText(Integer.toString(q1-q2));
}
b=0;
}
}
else if(iAction==event.ACTION_MOVE){
if(event.getX()<=515){
//button0 x160-384 y45-159
//button1 x385-520 y160-325
//button2 x385-520 y326-565
//button3 x160-384 y566-700
//button4 x40-159 y326-565
//button5 x40-159 y160-325
//button6 x160-384 y275-375
if((event.getX()>159&&event.getX()<385)&&((event.getY()>0)&&(event.getY()<160))){
a[0] = 1;
}
else if((event.getX()>384&&event.getX()<516)&&((event.getY()>159)&&(event.getY()<326))){
a[1] = 1;
}
else if((event.getX()>384&&event.getX()<516)&&((event.getY()>425)&&(event.getY()<566))){
a[2] = 1;
}
else if((event.getX()>159&&event.getX()<385)&&((event.getY()>565)&&(event.getY()<770))){
a[3] = 1;
}
else if((event.getX()>0&&event.getX()<160)&&((event.getY()>425)&&(event.getY()<566))){
a[4] = 1;
}
else if((event.getX()>0&&event.getX()<160)&&((event.getY()>159)&&(event.getY()<326))){
a[5] = 1;
}
else if((event.getX()>159&&event.getX()<385)&&((event.getY()>250)&&(event.getY()<400))){
a[6] = 1;
}
}
else if(event.getX()>=1120){
if((event.getX()>1279&&event.getX()<1505)&&((event.getY()>0)&&(event.getY()<160))){
c[0] = 1;
}
else if((event.getX()>1504&&event.getX()<1700)&&((event.getY()>159)&&(event.getY()<326))){
c[1] = 1;
}
else if((event.getX()>1504&&event.getX()<1700)&&((event.getY()>425)&&(event.getY()<566))){
c[2] = 1;
}
else if((event.getX()>1279&&event.getX()<1505)&&((event.getY()>565)&&(event.getY()<770))){
c[3] = 1;
}
else if((event.getX()>1120&&event.getX()<1280)&&((event.getY()>425)&&(event.getY()<566))){
c[4] = 1;
}
else if((event.getX()>1120&&event.getX()<1280)&&((event.getY()>159)&&(event.getY()<326))){
c[5] = 1;
}
else if((event.getX()>1279&&event.getX()<1505)&&((event.getY()>250)&&(event.getY()<400))){
c[6] = 1;
}
}
else{
//b 0+ 1- 2* 3/
if((event.getX()>516&&event.getX()<1121)&&((event.getY()>0)&&(event.getY()<225))){
b_tmp[0] = 1;
}
else if((event.getX()>516&&event.getX()<750)&&((event.getY()>0)&&(event.getY()<750))){
b_tmp[3] = 1;
}
else if((event.getX()>516&&event.getX()<1121)&&((event.getY()>500)&&(event.getY()<750))){
b_tmp[2] = 1;
}
else if((event.getX()>950&&event.getX()<1121)&&((event.getY()>0)&&(event.getY()<750))){
b_tmp[1] = 1;
}
}
}
return true; // 代表該事件已被處理,不再向上傳遞了。
};
}
String[] seg7patterns ={
"1111110", // 0
"0110000", // 1
"1101101", // 2
"1111001", // 3
"0110011", // 4
"1011011", // 5
"1011111", // 6
"1110000", // 7
"1111111", // 8
"1111011" // 9
};
int seg7answer[]={0,1,2,3,4,5,6,7,8,9};
public int checkAnswer(String seg7flags)
{
for (int i = 0; i < 10; i++)
{
if (seg7flags.equals(seg7patterns[i])){
for(int n=0;n<7;n++){
a[n]=0;
c[n]=0;
}
count=0;
Log.d("get",Integer.toString(i));
return seg7answer[i];
}
}
return -1;
}
}
以下是實機運作畫面:
7+7
輸入9時下方顯示a:9(a表示左方數字)
輸入3時顯示c:3(c表右方數字)
輸入減法符號後右下方顯示為9-3=6
更改為加法符號後右下方判斷為9+3=12




