diff --git a/.idea/misc.xml b/.idea/misc.xml
index af0bbdd..29bb4c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3f6203e..9d05413 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,20 +12,15 @@
android:theme="@style/AppTheme">
-
-
-
-
-
+ android:label="@string/app_name"
+ android:exported="true">
-
+
-
diff --git a/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java b/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java
index 34e934d..da9de0c 100644
--- a/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java
+++ b/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java
@@ -242,6 +242,9 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) {
broadcastUpdate(ACTION_GATT_CONNECTED);
//得到所有Service
List supportedGattServices = gatt.getServices();
+ Log.d("ga6tt",supportedGattServices.size()+"");
+// supportedGattServices.remove(0);
+// supportedGattServices.remove(2);
for (BluetoothGattService gattService : supportedGattServices) {
//得到每个Service的Characteristics
gattCharacteristics = gattService.getCharacteristics();
@@ -265,6 +268,7 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) {
Log.d(TAG, "gattCharacteristic的属性为: 具备通知属性");
notifyUuid.add(gattCharacteristic.getUuid());
notify_UUID_service = gattService.getUuid();
+
notify_UUID_chara = gattCharacteristic.getUuid();
}
}
@@ -274,6 +278,9 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) {
mBluetoothGatt.setCharacteristicNotification(mBluetoothGatt
.getService(notify_UUID_service).getCharacteristic(notify_UUID_chara),true);
+// mBluetoothGatt.setCharacteristicNotification(UUID.fromString("00002b13-0000-1000-8000-00805f9b34fb"),true);
+
+
}
//调用mBluetoothGatt.readCharacteristic(characteristic)读取数据回调,在这里面接收数据
@@ -329,7 +336,7 @@ public void onCreate() {
super.onCreate();
init();
Log.d(TAG,"创建了服务");
-//// //调试用
+// //调试用
// mHandler.postDelayed(new Runnable() {
// @Override
// public void run() {
@@ -348,7 +355,6 @@ public IBinder onBind(Intent intent) {
@Override
public boolean onUnbind(Intent intent) {
- close();
return super.onUnbind(intent);
}
public void close() {
diff --git a/app/src/main/java/com/kinco/MotorApp/MainActivity.java b/app/src/main/java/com/kinco/MotorApp/MainActivity.java
index 1959bed..814c999 100644
--- a/app/src/main/java/com/kinco/MotorApp/MainActivity.java
+++ b/app/src/main/java/com/kinco/MotorApp/MainActivity.java
@@ -3,6 +3,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -32,9 +33,6 @@
import java.util.List;
public class MainActivity extends AppCompatActivity {
- private TextView textview;
- private Button mButton3;
- private Button mButton4;
private FirstpageFragment firstpageFragment=new FirstpageFragment(); ;
private SecondpageFragment secondpageFragment=new SecondpageFragment();
private ThirdpageFragment thirdpageFragment=new ThirdpageFragment();
@@ -83,6 +81,19 @@ protected void onSaveInstanceState(Bundle outState) {
}
+ //返回键不会销毁程序
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ Intent home = new Intent(Intent.ACTION_MAIN);
+ home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ home.addCategory(Intent.CATEGORY_HOME);
+ startActivity(home);
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
@Override
@@ -97,7 +108,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
}
break;
case R.id.item01:
- Toast.makeText(MyApplication.getContext(),"Coming soon",Toast.LENGTH_SHORT);
+ Toast.makeText(MainActivity.this,"Coming soon",Toast.LENGTH_SHORT);
break;
case R.id.item02:
Toast.makeText(MyApplication.getContext(),"Coming soon",Toast.LENGTH_SHORT);
diff --git a/app/src/main/java/com/kinco/MotorApp/OSCActivity.java b/app/src/main/java/com/kinco/MotorApp/OSCActivity.java
deleted file mode 100644
index 06c5eef..0000000
--- a/app/src/main/java/com/kinco/MotorApp/OSCActivity.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package com.kinco.MotorApp;
-
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.util.DisplayMetrics;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.View;
-import android.widget.Button;
-
-import androidx.appcompat.app.AppCompatActivity;
-
-import com.kinco.MotorApp.R;
-
-import java.util.Random;
-import java.util.Timer;
-import java.util.TimerTask;
-
-public class OSCActivity extends AppCompatActivity implements View.OnClickListener {
- private SurfaceHolder holder;
- private SurfaceView showSurfaceView;
-
- private Button btnShowSin;
- private Button btnShowCos;
- private Button btnShowBrokenLine;
-
- private Paint paint;
-
- private int HEIGHT;
- // 要绘制的曲线的水平宽度
- private int WIDTH;
- // 离屏幕左边界的起始距离
- private final int X_OFFSET = 5;
- // 初始化X坐标
- private int cx = X_OFFSET;
- // 实际的Y轴的位置
- private int centerY ;
- private Timer timer = new Timer();
- private TimerTask task = null;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.osc_page);
- // 获得SurfaceView对象
- showSurfaceView = (SurfaceView) findViewById(R.id.showSurfaceView);
- btnShowSin = (Button) findViewById(R.id.btnShowSin);
- btnShowCos = (Button) findViewById(R.id.btnShowCos);
- btnShowBrokenLine = (Button) findViewById(R.id.btnShowBrokenLine);
-
- btnShowSin.setOnClickListener(this);
- btnShowCos.setOnClickListener(this);
- btnShowBrokenLine.setOnClickListener(this);
-
- InitData();
-
- // 初始化SurfaceHolder对象
- holder = showSurfaceView.getHolder();
- paint = new Paint();
- paint.setColor(Color.GREEN);
- paint.setStrokeWidth(3);
- }
-
- private void InitData() {
- Resources resources = this.getResources();
- DisplayMetrics dm = resources.getDisplayMetrics();
- //获取屏幕的宽度作为示波器的边长
- HEIGHT = dm.widthPixels;
- WIDTH = dm.widthPixels;
- //Y轴的中心就是高的一半
- centerY = HEIGHT / 2;
-
- }
-
- @Override
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.btnShowSin:
- showSineCord(view);
- break;
- case R.id.btnShowCos:
- showSineCord(view);
- break;
- case R.id.btnShowBrokenLine:
- showBrokenLine();
- break;
- }
-
- }
-
- /**
- * 折线曲线
- */
- private void showBrokenLine(){
-
- drawBackGround(holder);
- cx = X_OFFSET;
- if (task != null) {
- task.cancel();
- }
- task = new TimerTask() {
- int startX = 0;
- int startY = 200;
- Random random = new Random();
- @Override
- public void run() {
-
- int cy = random.nextInt(100)+200;
-
- Canvas canvas = holder.lockCanvas(new Rect(cx-10, cy - 900,
- cx + 10, cy + 900));
-
- // 根据X,Y坐标画线
- canvas.drawLine(startX, startY ,cx, cy, paint);
-
- //结束点作为下一次折线的起始点
- startX = cx;
- startY = cy;
-
- cx+=10;
- // 超过指定宽度,线程取消,停止画曲线
- if (cx > WIDTH) {
- task.cancel();
- task = null;
- }
- // 提交修改
- holder.unlockCanvasAndPost(canvas);
- }
- };
- timer.schedule(task, 0, 300);
- }
-
- /**
- * 正余弦曲线函数
- */
- private void showSineCord(final View view){
- drawBackGround(holder);
- cx = X_OFFSET;
- if (task != null) {
- task.cancel();
- }
- task = new TimerTask() {
-
- @Override
- public void run() {
- // 根据是正玄还是余玄和X坐标确定Y坐标
- int cy = view.getId()==R.id.btnShowSin?
- centerY- (int) (100 * Math.sin((cx - 5) * 2 * Math.PI/ 150))
- :centerY- (int) (100 * Math.cos((cx - 5) * 2 * Math.PI/ 150));
-
- Canvas canvas = holder.lockCanvas(new Rect(cx, cy - 2,
- cx + 2, cy + 2));
- // 根据X,Y坐标画点
- canvas.drawPoint(cx, cy, paint);
- cx++;
- // 超过指定宽度,线程取消,停止画曲线
- if (cx > WIDTH) {
- task.cancel();
- task = null;
- }
- // 提交修改
- holder.unlockCanvasAndPost(canvas);
- }
- };
- timer.schedule(task, 0, 30);
- }
-
- private void drawBackGround(SurfaceHolder holder) {
- Canvas canvas = holder.lockCanvas();
- // 绘制黑色背景
- canvas.drawColor(Color.BLACK);
- Paint p = new Paint();
- p.setColor(Color.WHITE);
- p.setStrokeWidth(2);
-
- // 画网格8*8
- Paint mPaint = new Paint();
- mPaint.setColor(Color.GRAY);// 网格为黄色
- mPaint.setStrokeWidth(1);// 设置画笔粗细
- int oldY = 0;
- for (int i = 0; i <= 8; i++) {// 绘画横线
- canvas.drawLine(0, oldY, WIDTH, oldY, mPaint);
- oldY = oldY + WIDTH/8;
- }
- int oldX = 0;
- for (int i = 0; i <= 8; i++) {// 绘画纵线
- canvas.drawLine(oldX, 0, oldX, HEIGHT, mPaint);
- oldX = oldX + HEIGHT/8;
- }
-
- // 绘制坐标轴
- canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, p);
- canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p);
- holder.unlockCanvasAndPost(canvas);
- holder.lockCanvas(new Rect(0, 0, 0, 0));
- holder.unlockCanvasAndPost(canvas);
- }
-
-}
-
diff --git a/app/src/main/java/com/kinco/MotorApp/SplashActivity.java b/app/src/main/java/com/kinco/MotorApp/SplashActivity.java
index 3c80a01..3b04d5a 100644
--- a/app/src/main/java/com/kinco/MotorApp/SplashActivity.java
+++ b/app/src/main/java/com/kinco/MotorApp/SplashActivity.java
@@ -9,6 +9,7 @@
import android.view.WindowManager;
+import com.kinco.MotorApp.ui.DeviceList;
public class SplashActivity extends Activity {
@@ -31,6 +32,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ //避免重复加载
+ if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
+ finish();
+ return;
+ }
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏
@@ -65,7 +71,7 @@ public void run() {
- Intent it=new Intent(getApplicationContext(),MainActivity.class);//启动MainActivity
+ Intent it=new Intent(getApplicationContext(), DeviceList.class);//启动MainActivity
diff --git a/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java b/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java
index 6d65607..650c977 100644
--- a/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java
+++ b/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java
@@ -26,7 +26,7 @@ public TabFragmentUtils(RadioGroup radioGroup, int container, List fra
//设置radiobutton的点事件
radioGroup.setOnCheckedChangeListener(this);
//默认选择0 页面
- ((RadioButton) radioGroup.getChildAt(0)).setChecked(true);
+ ((RadioButton) radioGroup.getChildAt(3)).setChecked(true);
}
public void onCheckedChanged(RadioGroup group, int checkedId) {
diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java
index 4bf0bce..4a41d7a 100644
--- a/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java
+++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java
@@ -6,6 +6,9 @@
import com.kinco.MotorApp.util;
+/**
+ * 错误提示框
+ */
public class ErrorDialog extends AlertDialog.Builder{
public ErrorDialog(Context context,String text) {
super(context);
diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/LoadingDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/LoadingDialog.java
new file mode 100644
index 0000000..11be7b5
--- /dev/null
+++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/LoadingDialog.java
@@ -0,0 +1,68 @@
+package com.kinco.MotorApp.alertdialog;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Color;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.kinco.MotorApp.R;
+import com.kinco.MotorApp.edittext.TableAdapter;
+
+import java.lang.reflect.Field;
+
+public class LoadingDialog {
+ private View view;
+ private LayoutInflater inflater;
+ private TextView textView;
+ private AlertDialog.Builder builder;
+ private AlertDialog dialog;
+ private TableAdapter.ViewHolder holder;
+ private Field field;
+ Button btnPos;
+ Button btnNeg;
+ public OnClickCancelListener onClickCancelListener;
+ Context context;
+ public LoadingDialog(final Context context,String title, String text, boolean cancelable){
+ builder = new AlertDialog.Builder(context);
+ builder.setCancelable(false);
+ builder.setTitle(title);
+ inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ view=inflater.inflate(R.layout.loading_layout,null);
+ textView=(TextView) (view.findViewById(R.id.loadingText));
+ textView.setText(text);
+ builder.setView(view);
+
+ //据实际情况是否要“取消”按钮
+ if(cancelable){
+ builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ onClickCancelListener.onNegativeClick();
+ }
+ });
+ }
+ dialog = builder.show();
+
+ }
+ public interface OnClickCancelListener{
+ void onNegativeClick();
+ }
+
+ public void setOnClickCancelListener(OnClickCancelListener onClickCancelListener){
+ this.onClickCancelListener=onClickCancelListener;
+ }
+
+ public void show(){
+ builder.show();
+ }
+
+ public void gone(){
+ dialog.dismiss();
+ }
+
+}
diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java
index bec02a8..8855f3d 100644
--- a/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java
+++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java
@@ -1,26 +1,20 @@
package com.kinco.MotorApp.alertdialog;
import android.app.AlertDialog;
-import android.app.DatePickerDialog;
-import android.app.Dialog;
-import android.bluetooth.BluetoothGatt;
+
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.text.InputFilter;
import android.text.InputType;
-import android.text.TextWatcher;
-import android.view.View;
import android.widget.Button;
import android.widget.EditText;
-import android.widget.Toast;
-
-import com.kinco.MotorApp.BluetoothService.BLEService;
-
import java.lang.reflect.Field;
-//TODO 密码输入框
+/**
+ * 密码输入框
+ */
public class PasswordDialog{
private String password="";
final private AlertDialog.Builder builder;
@@ -64,8 +58,8 @@ public void onClick(DialogInterface dialog, int which) {
btnNeg = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
btnPos.setText("Connect");
btnNeg.setText("Cancel");
- btnPos.setTextColor(Color.BLUE);
- btnNeg.setTextColor(Color.BLUE);
+ btnPos.setTextColor(Color.RED);
+ btnNeg.setTextColor(Color.RED);
//设置不可消失
try {
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/SetDataDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/SetDataDialog.java
new file mode 100644
index 0000000..6d2fcab
--- /dev/null
+++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/SetDataDialog.java
@@ -0,0 +1,196 @@
+package com.kinco.MotorApp.alertdialog;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Color;
+import android.text.InputFilter;
+import android.text.InputType;
+import android.widget.AbsoluteLayout;
+import android.widget.Button;
+import android.widget.EditText;
+
+import android.app.AlertDialog;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.kinco.MotorApp.R;
+
+import java.lang.reflect.Field;
+
+public class SetDataDialog {
+ private String SetData = "";
+ private String title;
+ private String Unit;
+ final private AlertDialog.Builder builder;
+ private AlertDialog dialog;
+ private Field field;
+ Button btnPos;
+ Button btnNeg;
+ public SetDataDialog.OnClickBottomListener onClickBottomListener;
+ Context context;
+
+
+ public SetDataDialog(final Context context,String title,String Unit,String Hint) {
+ this.context = context;
+ this.title=title;
+ this.Unit=Unit;
+ builder = new AlertDialog.Builder(context);
+ builder.setCancelable(false);
+ builder.setTitle(title);
+// builder.setMessage("\n"+"Range:" +Hint+"\n"+"Default:" +"\n"+"Current:" );
+ final TextView blank= new TextView(context);
+ blank.setText("");
+ final TextView blank1= new TextView(context);
+ blank1.setText("");
+
+ final TextView range = new TextView(context);
+ range.setText(" range: ");
+ range.setTextSize(17);
+ final TextView Range = new TextView(context);
+ Range.setText(Hint);
+ Range.setTextSize(17);
+ Range.setTextColor(Color.BLACK);
+ Range.setBackgroundResource(R.drawable.lin);
+
+ LinearLayout layout1=new LinearLayout(context);
+ layout1.setOrientation(LinearLayout.HORIZONTAL);
+ layout1.addView(range);
+ layout1.addView(Range);
+
+ final TextView default1= new TextView(context);
+ default1.setText(" default:");
+ default1.setTextSize(17);
+ final TextView Default = new TextView(context);
+ Default.setText("Default");
+ Default.setTextSize(17);
+ Default.setTextColor(Color.BLACK);
+ Default.setBackgroundResource(R.drawable.lin);
+
+ LinearLayout layout2=new LinearLayout(context);
+ layout2.setOrientation(LinearLayout.HORIZONTAL);
+ layout2.addView(default1);
+ layout2.addView(Default);
+
+ final TextView current = new TextView(context);
+ current.setText(" current:");
+ current.setTextSize(17);
+ final TextView Current = new TextView(context);
+ Current.setText("Current");
+ Current.setTextSize(17);
+ Current.setTextColor(Color.BLACK);
+ Current.setBackgroundResource(R.drawable.lin);
+
+ LinearLayout layout3=new LinearLayout(context);
+ layout3.setOrientation(LinearLayout.HORIZONTAL);
+ layout3.addView(current);
+ layout3.addView(Current);
+
+ final TextView input = new TextView(context);
+ input.setText(" input:");
+ input.setTextSize(17);
+ final EditText edit = new EditText(context);
+ edit.setFocusable(true);
+ edit.setFocusableInTouchMode(true);
+ edit.setInputType(InputType.TYPE_CLASS_NUMBER);
+ edit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(400000)});
+ edit.setHint("SetData");
+ final TextView unit = new TextView(context);
+ unit.setText(Unit);
+ unit.setTextSize(17);
+ unit.setTextColor(Color.BLACK);
+ LinearLayout layout4=new LinearLayout(context);
+ layout4.setOrientation(LinearLayout.HORIZONTAL);
+ layout4.addView(input);
+ layout4.addView(edit);
+ layout4.addView(unit);
+
+ LinearLayout layout0=new LinearLayout(context);
+ layout0.setOrientation(LinearLayout.VERTICAL);
+ layout0.addView(layout1);
+ layout0.addView(blank);
+ layout0.addView(layout2);
+ layout0.addView(blank1);
+ layout0.addView(layout3);
+ layout0.addView(layout4);
+
+ builder.setView(layout0);
+
+ builder.setPositiveButton("set", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ SetData = edit.getText().toString();
+ onClickBottomListener.onPositiveClick();
+
+ }
+ });
+
+ builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ onClickBottomListener.onNegativeClick();
+ }
+ });
+
+ dialog = builder.show();
+ btnPos = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
+ btnNeg = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
+ btnPos.setText("Set");
+ btnNeg.setText("Cancel");
+ btnPos.setTextColor(Color.RED);
+ btnNeg.setTextColor(Color.RED);
+ //设置不可消失
+ try {
+ field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
+ field.setAccessible(true);
+ field.set(dialog, false);
+ } catch (Exception e) {
+ ErrorDialog errorDialog = new ErrorDialog(context, e.toString());
+ errorDialog.show();
+ }
+
+ }
+
+ public interface OnClickBottomListener {
+ void onPositiveClick();
+
+ void onNegativeClick();
+ }
+
+ /**
+ * 提供给外界设置监听接口的方法
+ *
+ * @param onClickBottomListener
+ * @return
+ */
+ public SetDataDialog setOnClickBottomListener(SetDataDialog.OnClickBottomListener onClickBottomListener) {
+ this.onClickBottomListener = onClickBottomListener;
+ return this;
+ }
+
+ /**
+ * 展示dialog
+ */
+ public void show() {
+ builder.show();
+ }
+
+ /**
+ * 取消dialog
+ */
+ public void gone() {
+ try {
+ field.set(dialog, true);
+ dialog.dismiss();
+ } catch (Exception e) {
+ ErrorDialog errorDialog = new ErrorDialog(context, e.toString());
+ errorDialog.show();
+ }
+ }
+
+ ;
+
+ public String getSetData() {
+ return SetData;
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java b/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java
index 2ffc916..18fadaf 100644
--- a/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java
+++ b/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java
@@ -34,7 +34,7 @@ public class ListViewAdapter extends BaseAdapter {
public interface AddressNoListener{
- void clickListener(String Sth,String value); //确定传出的值
+ void clickListener(String Sth,String value,String name,String Unit,String Hint); //确定传出的值
}
// public AddressNoListener getAddressNoListener(){return addressNoListener;}
public void setAddressNoListener(ListViewAdapter.AddressNoListener addressNoListener)
@@ -78,7 +78,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
holder.edit_current.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
- addressNoListener.clickListener(itemObj.getAddress(),itemObj.getText());
+ addressNoListener.clickListener(itemObj.getAddress(),itemObj.getText(),itemObj.getName(),itemObj.getUnit(),itemObj.getHint());
}
});
convertView.setTag(holder);
@@ -134,10 +134,10 @@ private class ViewHolder {
public TextView edit_name;
public Button edit_current;
public TextView edit_unit;
- private EditText editText;//1
+ private TextView editText;//1
public ViewHolder(View convertView) {
- editText = (EditText) convertView.findViewById(R.id.edit_text);
+ editText = (TextView) convertView.findViewById(R.id.edit_text);
}
}
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java b/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java
index 8d289c1..d89ec0c 100644
--- a/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java
+++ b/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java
@@ -34,6 +34,8 @@
import android.widget.Toast;
import com.kinco.MotorApp.BluetoothService.BLEService;
+import com.kinco.MotorApp.MainActivity;
+import com.kinco.MotorApp.alertdialog.LoadingDialog;
import com.kinco.MotorApp.alertdialog.PasswordDialog;
import com.kinco.MotorApp.util;
import com.kinco.MotorApp.R;
@@ -58,7 +60,8 @@ public class DeviceList extends AppCompatActivity{
private Button BLEScan;
private Switch Filter;
private PasswordDialog dialog;
- private String password="";
+ private LoadingDialog loadingDialog;
+ private boolean firstTime;
private boolean mScanning;//是否正在搜索
private Handler mHandler;
private TextView count;
@@ -71,7 +74,7 @@ public class DeviceList extends AppCompatActivity{
ArrayList connected_list = new ArrayList();
private LocalReceiver localReceiver;
private BLEService mBluetoothLeService;
- private String editPassword;
+ private String editPassword="";
private void initUI(){
setContentView(R.layout.device_list);
@@ -131,7 +134,7 @@ public void onClick(View v) {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
-// try {
+ try {
initUI();
getBlePermissionFromSys();
Intent BLEIntent = new Intent(this, BLEService.class);
@@ -140,6 +143,9 @@ protected void onCreate(Bundle savedInstanceState){
localReceiver = new LocalReceiver();
localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.registerReceiver(localReceiver, util.makeGattUpdateIntentFilter());
+ }catch (Exception e){
+ Log.d(TAG,e.toString());
+ }
}
@Override
protected void onDestroy(){
@@ -173,9 +179,13 @@ public void onItemClick(AdapterView> adapterView,
connected_list.clear();
mPairedDevicesArrayAdapter.notifyDataSetChanged();
}
- Toast toast = Toast.makeText(DeviceList.this,"Connecting...please wait", Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER,0,0);
- toast.show();
+ loadingDialog = new LoadingDialog(DeviceList.this,"","Connecting...please wait",true);
+ loadingDialog.setOnClickCancelListener(new LoadingDialog.OnClickCancelListener(){
+ public void onNegativeClick(){
+ loadingDialog.gone();
+ mBluetoothLeService.close();
+ }
+ });
mBluetoothLeService.connect(address);
}
@@ -242,19 +252,23 @@ public void run() {
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
mBluetoothLeService.slaveAddress = slaveAddress;
- try {
- mBluetoothLeService.slaveCode = util.intToByte2(Integer.valueOf(slaveAddress.substring(slaveAddress.indexOf("_") + 1, slaveAddress.indexOf("\n"))))[1];
- Log.d(TAG,slaveAddress.substring(slaveAddress.indexOf("_")+1,slaveAddress.indexOf("\n")));
- connected_list.clear();
- connected_list.add(slaveAddress);
- mPairedDevicesArrayAdapter.notifyDataSetChanged();
- showPasswordDialog();
- //finish();
- }catch(Exception e){
- util.centerToast(DeviceList.this,"Failed to get SlaveAddress",0);
- e.printStackTrace();
- Log.d(TAG,e.toString());
- }
+// try {
+// loadingDialog.gone();
+// mBluetoothLeService.slaveCode = util.intToByte2(Integer.valueOf(slaveAddress.substring(slaveAddress.indexOf("_") + 1, slaveAddress.indexOf("\n"))))[1];
+// Log.d(TAG,slaveAddress.substring(slaveAddress.indexOf("_")+1,slaveAddress.indexOf("\n")));
+// connected_list.clear();
+// connected_list.add(slaveAddress);
+// mPairedDevicesArrayAdapter.notifyDataSetChanged();
+// showPasswordDialog();
+//
+//
+//
+// }catch(Exception e){
+// util.centerToast(DeviceList.this,"Failed to get SlaveAddress",0);
+// e.printStackTrace();
+// Log.d(TAG,e.toString());
+// }
+ debug();
}
});
@@ -262,6 +276,8 @@ public void run() {
}
else if(action.equals(BLEService.ACTION_GATT_DISCONNECTED)){
+ if(!(loadingDialog==null))
+ loadingDialog.gone();
Toast toast = Toast.makeText(getApplicationContext(),"Connection failed!",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
@@ -277,6 +293,8 @@ else if(action.equals(BLEService.ACTION_DATA_AVAILABLE)){
if (!(dialog == null)) {
util.centerToast(DeviceList.this, "Correct!", 0);
dialog.gone();
+ Intent activityIntent = new Intent(DeviceList.this, MainActivity.class);
+ startActivity(activityIntent);
finish();
}
}else
@@ -317,25 +335,17 @@ public void onNegativeClick() {
}
});
- //dialog.show();
-// final PasswordDialog dialog = new PasswordDialog(DeviceList.this, mBluetoothLeService);
-// dd = dialog.show();
-// field = dd.getClass().getSuperclass().getDeclaredField("mShowing");
-// mHandler.postDelayed(new Runnable() {
-// @Override
-// public void run() {
-// try {
-// if (password.equals(dialog.getPassword()))
-// field.set(dd, true);
-// }catch (Exception e){}
-// }
-// },1000);
-// field.setAccessible(true);
-// field.set(dd, false);// false表示不关闭
}catch(Exception e){
Log.d(TAG,"PasswordDialog error");
}
}
+ private void debug(){
+ mBluetoothLeService.slaveCode=0x05;
+ Intent activityIntent = new Intent(DeviceList.this, MainActivity.class);
+ startActivity(activityIntent);
+ finish();
+ }
+
}
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java
index d5184e7..e03dbba 100644
--- a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java
+++ b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java
@@ -10,6 +10,7 @@
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
+import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
@@ -20,6 +21,7 @@
import com.kinco.MotorApp.BluetoothService.BLEService;
import com.kinco.MotorApp.alertdialog.ErrorDialog;
+import com.kinco.MotorApp.alertdialog.SetDataDialog;
import com.kinco.MotorApp.edittext.ItemBean;
import com.kinco.MotorApp.edittext.ListViewAdapter;
import com.kinco.MotorApp.edittext.Text;
@@ -30,6 +32,8 @@
import java.util.ArrayList;
import java.util.List;
+import static androidx.constraintlayout.widget.Constraints.TAG;
+
public class FirstMoreActivity extends Activity implements View.OnClickListener {
@@ -255,7 +259,8 @@ public class FirstMoreActivity extends Activity implements View.OnClickListener
private ListViewAdapter mAdapter;
private List mData;
private BLEService mBluetoothLeService;
-
+ private SetDataDialog setDatadialog;
+ private String editSetData="";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setting_2);
@@ -270,8 +275,10 @@ public void onCreate(Bundle savedInstanceState) {
mAdapter = new ListViewAdapter(this, mData);
mAdapter.setAddressNoListener(new ListViewAdapter.AddressNoListener() {
@Override
- public void clickListener(String address, String value) {
+ public void clickListener(String address, String value,String name,String Unit,String Hint) {
mBluetoothLeService.writeData(address,value);
+// Toast.makeText(FirstMoreActivity.this,name, Toast.LENGTH_SHORT).show();
+ showSetDataDialog(name,Unit,Hint);
}
});
mListView.setAdapter(mAdapter);
@@ -316,6 +323,27 @@ public void clickListener(String address, String value) {
button20.setOnClickListener(this);
}
+
+ private void showSetDataDialog(String title,String Unit,String Hint){
+ try {
+ setDatadialog = new SetDataDialog(this,title,Unit,Hint);
+ setDatadialog.setOnClickBottomListener(new SetDataDialog.OnClickBottomListener(){
+ @Override
+ public void onPositiveClick() {
+ editSetData = setDatadialog.getSetData();
+ }
+ @Override
+ public void onNegativeClick() {
+ setDatadialog.gone();
+
+ }
+ });
+ }catch(Exception e){
+ Log.d(TAG,"SetDataDialog error");
+ }
+
+ }
+
private void initService(){
//绑定服务
Intent BLEIntent = new Intent(this, BLEService.class);
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java
index a7c86ee..01f2f25 100644
--- a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java
+++ b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java
@@ -1,8 +1,5 @@
package com.kinco.MotorApp.ui.firstpage;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -27,6 +24,7 @@
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.kinco.MotorApp.DemoFragment;
+import com.kinco.MotorApp.alertdialog.SetDataDialog;
import com.kinco.MotorApp.edittext.ItemBean;
import com.kinco.MotorApp.edittext.ListViewAdapter;
import com.kinco.MotorApp.edittext.Text;
@@ -54,6 +52,8 @@ public class FirstpageFragment extends Fragment implements View.OnClickListener
private BLEService mBluetoothLeService;
private LocalBroadcastManager localBroadcastManager;
private BroadcastReceiver receiver=new LocalReceiver();
+ private SetDataDialog setDatadialog;
+ private String editSetData="";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -63,7 +63,6 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- initService();
show();
//输入型
mListView = (ListView) getActivity().findViewById(R.id.list_view0);
@@ -72,8 +71,9 @@ public void onActivityCreated(Bundle savedInstanceState) {
mAdapter = new ListViewAdapter(this.getActivity(), mData);
mAdapter.setAddressNoListener(new ListViewAdapter.AddressNoListener() {
@Override
- public void clickListener(String address, String value) {
+ public void clickListener(String address, String value,String name,String Unit,String Hint) {
mBluetoothLeService.writeData(address,value);
+ showSetDataDialog();
}
});
mListView.setAdapter(mAdapter);
@@ -104,7 +104,8 @@ private void initService(){
Intent BLEIntent = new Intent(getActivity(),BLEService.class);
getActivity().bindService(BLEIntent,connection, Context.BIND_AUTO_CREATE);
localBroadcastManager = LocalBroadcastManager.getInstance(getContext());
- localBroadcastManager.registerReceiver(receiver,util.makeGattUpdateIntentFilter());
+ //if(!util.isRegister(localBroadcastManager,BLEService.ACTION_DATA_AVAILABLE))
+ localBroadcastManager.registerReceiver(receiver,util.makeGattUpdateIntentFilter());
}
private void show() {
List texts = new ArrayList();
@@ -130,7 +131,25 @@ public void addressNo(int addressNo) {
});
listView = (ListView) getActivity().findViewById(R.id.mylist0);
listView.setAdapter(textAdapter);//传值到ListView中
- util.setListViewHeightBasedOnChildren(listView);
+ //util.setListViewHeightBasedOnChildren(listView);
+ }
+ }
+ private void showSetDataDialog(){
+ try {
+ setDatadialog = new SetDataDialog(this.getActivity(),"Digital reference frequency","HZ","0.0~300.00");
+ setDatadialog.setOnClickBottomListener(new SetDataDialog.OnClickBottomListener(){
+ @Override
+ public void onPositiveClick() {
+ editSetData = setDatadialog.getSetData();
+ }
+ @Override
+ public void onNegativeClick() {
+ setDatadialog.gone();
+
+ }
+ });
+ }catch(Exception e){
+ Log.d(TAG,"SetDataDialog error");
}
}
@@ -188,9 +207,17 @@ public void onServiceDisconnected(ComponentName name) {
};
@Override
- public void onPause() {
- super.onPause();
- localBroadcastManager.unregisterReceiver(receiver);
+ public void onStart() {
+ super.onStart();
+ initService();
+ util.centerToast(getContext(),"1被开启",0);
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ if(!(localBroadcastManager==null))
+ localBroadcastManager.unregisterReceiver(receiver);
}
public FirstpageFragment newInstance(int i) {
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/DragImage.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/DragImage.java
new file mode 100644
index 0000000..d2a1644
--- /dev/null
+++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/DragImage.java
@@ -0,0 +1,180 @@
+package com.kinco.MotorApp.ui.fourthpage;
+
+import android.content.Context;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.Bitmap;
+import android.view.MotionEvent;
+import android.view.ScaleGestureDetector;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.View;
+
+import com.kinco.MotorApp.R;
+import com.kinco.MotorApp.util;
+
+
+class DragImage extends SurfaceView implements SurfaceHolder.Callback, View.OnTouchListener, ScaleGestureDetector.OnScaleGestureListener {
+ private Context context;
+ private SurfaceHolder holder;
+ private Bitmap icon;
+ private Paint paint;
+ private boolean running=true;
+ private float scale;
+ private float preScale = 1;// 默认前一次缩放比例为1
+ ScaleGestureDetector dd;
+
+ public DragImage(Context context) {
+ super(context);
+ this.context=context;
+ holder = this.getHolder();//获取holder
+ holder.addCallback(this);
+ this.setOnTouchListener(this);
+ dd = new ScaleGestureDetector(context,this);
+ }
+
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+
+ icon = BitmapFactory.decodeResource(context.getResources(),R.mipmap.ic_launcher_foreground);
+ paint=new Paint();
+ running=true;
+ // new Thread(this).start();
+
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width,
+ int height) {
+ }
+
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ running=false;
+ }
+
+ @Override
+ public boolean onScale(ScaleGestureDetector detector) {
+
+ float previousSpan = detector.getPreviousSpan();
+ float currentSpan = detector.getCurrentSpan();
+ if (currentSpan < previousSpan) {
+ // 缩小
+ //scale = preScale-detector.getScaleFactor();
+ scale = preScale - (previousSpan - currentSpan) / 500;
+ } else {
+ // 放大
+ scale = preScale+detector.getScaleFactor()/3;
+ //scale = preScale + (currentSpan - previousSpan) / 1000;
+ }
+
+
+
+ return false;
+ }
+
+ @Override
+ public boolean onScaleBegin(ScaleGestureDetector detector) {
+ return true;
+ }
+
+ @Override
+ public void onScaleEnd(ScaleGestureDetector detector) {
+ Matrix mMatrix = new Matrix();
+ mMatrix.setScale(scale, scale);
+ // 锁定整个SurfaceView
+ Canvas mCanvas = holder.lockCanvas();
+ // 清屏
+ mCanvas.drawColor(Color.BLACK);
+ // 画缩放后的图
+ mCanvas.drawBitmap(icon, mMatrix, null);
+ // 绘制完成,提交修改
+ holder.unlockCanvasAndPost(mCanvas);
+ // 重新锁一次
+ holder.lockCanvas(new Rect(0, 0, 0, 0));
+ holder.unlockCanvasAndPost(mCanvas);
+ util.centerToast(context,scale+"",0);
+ preScale = scale;
+ }
+
+
+ //@Override
+ public void run() {
+ int SLEEP_TIME=100;
+ while (running) {
+ //开始画的时间 long start=System.currentTimeMillis();
+// Canvas canvas = holder.lockCanvas();//获取画布
+// canvas.drawColor(Color.GREEN);
+// canvas.drawBitmap(icon, rect.left,rect.top,null);
+// holder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像
+ //结束的时间 long end=System.currentTimeMillis();
+ }
+ }
+
+ // Region region=new Region();
+ private Point point=new Point();//点击点
+ private Rect rect=new Rect(0,0,400,1000);//图片的rect
+ private boolean canDrag=false;//判断是否点击在图片上,否则拖动无效
+ private int offsetX=0,offsetY=0;//点击点离图片左上角的距离
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ dd.onTouchEvent(event);
+ return true;
+ // TODO Auto-generated method stub
+// switch (event.getAction()) {
+//
+// //手按下的时候
+// case MotionEvent.ACTION_DOWN:
+// point.x=(int)event.getX();
+// point.y=(int)event.getY();
+// if(rect.contains(point.x, point.y)){
+// canDrag=true;
+// offsetX=point.x-rect.left;
+// offsetY=point.y-rect.top;
+// }
+//
+// break;
+//
+// //移动的时候
+// case MotionEvent.ACTION_MOVE:
+// if(canDrag){
+// rect.left=(int)event.getX()-offsetX;
+// rect.top=(int)event.getY()-offsetY;
+// rect.right=rect.left+icon.getWidth();
+// rect.bottom=rect.top+icon.getHeight();
+// if (rect.left < 0) {
+// rect.left = 0;
+// rect.right = rect.left+icon.getWidth();
+// }
+// if (rect.right > getMeasuredWidth()) {
+// rect.right = getMeasuredWidth();
+// rect.left = rect.right-icon.getWidth();
+// }
+// if (rect.top < 0) {
+// rect.top = 0;
+// rect.bottom = rect.top+icon.getHeight();
+// }
+// if (rect.bottom > getMeasuredHeight()) {
+// rect.bottom = getMeasuredHeight();
+// rect.top = rect.bottom-icon.getHeight();
+// }
+// }
+// break;
+// case MotionEvent.ACTION_UP:
+// canDrag=false;
+// break;
+//
+// default:
+// break;
+// }
+// return true;
+ }
+
+ }
+
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java
index c7fc2c6..6f68668 100644
--- a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java
+++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java
@@ -10,6 +10,9 @@
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
+import android.graphics.Matrix;
+import android.graphics.PointF;
+import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -17,12 +20,16 @@
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
import android.widget.Button;
+import android.widget.Spinner;
import android.widget.Toast;
+import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
@@ -30,9 +37,8 @@
import com.kinco.MotorApp.BluetoothService.BLEService;
import com.kinco.MotorApp.R;
-import com.kinco.MotorApp.ui.firstpage.FirstpageFragment;
+import com.kinco.MotorApp.alertdialog.ErrorDialog;
import com.kinco.MotorApp.util;
-import com.kinco.MotorApp.ui.thirdpage.ThirdpageFragment;
import java.util.ArrayList;
import java.util.Iterator;
@@ -41,14 +47,14 @@
import java.util.TimerTask;
public class FourthpageFragment extends Fragment implements View.OnClickListener{
- private String TAG="ff";
+ private String TAG = "fourth";
+
private View view;//得到碎片对应的布局文件,方便后续使用
private SurfaceHolder holder;
- private SurfaceView showSurfaceView;
+ private MySurfaceView3 showSurfaceView;
//按钮
- private Button btnShowSin;
- private Button btnShowCos;
private Button btnShowBrokenLine;
+ private Spinner spinner;
private Paint paint;
@@ -56,11 +62,11 @@ public class FourthpageFragment extends Fragment implements View.OnClickListener
// 要绘制的曲线的水平宽度
private int WIDTH;
// 离屏幕左边界的起始距离
- private final int X_OFFSET = 5;
+ private final int X_OFFSET = 2;
// 初始化X坐标
private int cx = X_OFFSET;
// 实际的Y轴的位置
- private int centerY ;
+ private float centerY ;
private Timer timer = new Timer();
private TimerTask task = null;
private int packageCount=0;
@@ -70,32 +76,46 @@ public class FourthpageFragment extends Fragment implements View.OnClickListener
private boolean mDrawing=false;
private Handler mHnadler;
private int data[] = new int[1024];
+ private String[] addressList = {"0204","0202","0203"};
private ArrayList packageList = new ArrayList();
+ private float maxData = 0;
+ private float minData=0;
+ private float average = 0;
+
//记住一定要重写onCreateView方法
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.osc_page, container, false);//得到对应的布局文件
return view;
+ //DragImage dragImage = new DragImage(getContext());
+ //return dragImage;
}
+
+
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- initService();
+
// 获得SurfaceView对象
- showSurfaceView = (SurfaceView) getActivity().findViewById(R.id.showSurfaceView);
- btnShowSin = (Button) getActivity().findViewById(R.id.btnShowSin);
- btnShowCos = (Button) getActivity().findViewById(R.id.btnShowCos);
+ showSurfaceView = (MySurfaceView3)getActivity().findViewById(R.id.MySV3);
+ showSurfaceView.post(new Runnable() {
+ @Override
+ public void run() {
+ int width = showSurfaceView.getWidth();
+ int height = showSurfaceView.getHeight();
+ Log.i(TAG, "showSurfaceView Height is " + height + ", Width is " + width);
+ }
+ });
btnShowBrokenLine = (Button) getActivity().findViewById(R.id.btnShowBrokenLine);
-
- btnShowSin.setOnClickListener(this);
- btnShowCos.setOnClickListener(this);
btnShowBrokenLine.setOnClickListener(this);
+ spinner = getActivity().findViewById(R.id.OSCspinner);
InitData();
- // 初始化SurfaceHolder对象
- holder = showSurfaceView.getHolder();
+ // 初始化SurfaceHolder对象,被获取后会被锁住
+ //holder = showSurfaceView.getHolder();
+
paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStrokeWidth(3);
@@ -103,6 +123,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
mHnadler=new Handler();
+
}
@Override
@@ -112,18 +133,27 @@ public void onStop() {
task.cancel();
task=null;
}
+ localBroadcastManager.unregisterReceiver(receiver);
}
+
@Override
- public void onPause() {
- super.onPause();
- localBroadcastManager.unregisterReceiver(receiver);
+ public void onStart() {
+ super.onStart();
+ initService();
+ util.centerToast(getContext(),"4被开启",0);
+// mHnadler.postDelayed(new Runnable() {
+// @Override
+// public void run() {
+// drawBackGround(holder);
+// }
+// },300);
}
@Override
public void onResume() {
super.onResume();
- localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter());
+ Log.d("fourth","真实的高:"+showSurfaceView.getMeasuredHeight());
}
private void InitData() {
@@ -131,7 +161,10 @@ private void InitData() {
DisplayMetrics dm = resources.getDisplayMetrics();
//获取屏幕的宽度作为示波器的边长
HEIGHT = dm.widthPixels;
+// HEIGHT = dm.heightPixels;
WIDTH = dm.widthPixels;
+
+ Log.d(TAG,showSurfaceView.getHeight()+" "+showSurfaceView.getWidth());
//Y轴的中心就是高的一半
centerY = HEIGHT / 2;
@@ -140,23 +173,10 @@ private void InitData() {
@Override
public void onClick(View view) {
switch (view.getId()) {
- case R.id.btnShowSin:
- mBluetoothLeService.writeData("0202","0001");
- packageCount=0;
- packageList.clear();
- mDrawing=true;
-
- break;
- case R.id.btnShowCos:
- //showSineCord(view);
- mBluetoothLeService.writeData("0203","0001");
- packageCount=0;
- packageList.clear();
- mDrawing=true;
- break;
case R.id.btnShowBrokenLine:
//showBrokenLine();
- mBluetoothLeService.writeData("0204","0001");
+ testRandomDraw();
+ //mBluetoothLeService.writeData(addressList[spinner.getSelectedItemPosition()],"0001");
packageCount=0;
packageList.clear();
mDrawing=true;
@@ -209,40 +229,6 @@ public void run() {
timer.schedule(task, 0, 300);
}
- /**
- * 正余弦曲线函数
- */
- private void showSineCord(final View view){
- drawBackGround(holder);
- cx = X_OFFSET;
- if (task != null) {
- task.cancel();
- }
- task = new TimerTask() {
-
- @Override
- public void run() {
- // 根据是正玄还是余玄和X坐标确定Y坐标
- int cy = view.getId()==R.id.btnShowSin?
- centerY- (int) (100 * Math.sin((cx - 5) * 2 * Math.PI/ 150))
- :centerY- (int) (100 * Math.cos((cx - 5) * 2 * Math.PI/ 150));
-
- Canvas canvas = holder.lockCanvas(new Rect(cx, cy - 2,
- cx + 2, cy + 2));
- // 根据X,Y坐标画点
- canvas.drawPoint(cx, cy, paint);
- cx++;
- // 超过指定宽度,线程取消,停止画曲线
- if (cx > WIDTH) {
- task.cancel();
- task = null;
- }
- // 提交修改
- holder.unlockCanvasAndPost(canvas);
- }
- };
- timer.schedule(task, 0, 30);
- }
private void drawBackGround(SurfaceHolder holder) {
Canvas canvas = holder.lockCanvas();
@@ -250,23 +236,35 @@ private void drawBackGround(SurfaceHolder holder) {
canvas.drawColor(Color.BLACK);
Paint p = new Paint();
p.setColor(Color.WHITE);
- p.setStrokeWidth(2);
+ p.setStrokeWidth(5);
// 画网格8*8
Paint mPaint = new Paint();
- mPaint.setColor(Color.GRAY);// 网格为黄色
- mPaint.setStrokeWidth(1);// 设置画笔粗细
+ mPaint.setTextSize(50);
+ mPaint.setColor(Color.GRAY);// 网格为灰色
+ mPaint.setStrokeWidth(3);// 设置画笔粗细
int oldY = 0;
for (int i = 0; i <= 8; i++) {// 绘画横线
canvas.drawLine(0, oldY, WIDTH, oldY, mPaint);
- oldY = oldY + WIDTH/8;
+ if(spinner.getSelectedItemPosition()==0) {
+ if (i != 4)
+ canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, mPaint);
+ }else
+ canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, mPaint);
+ oldY = oldY + WIDTH / 8;
+
}
int oldX = 0;
for (int i = 0; i <= 8; i++) {// 绘画纵线
canvas.drawLine(oldX, 0, oldX, HEIGHT, mPaint);
- oldX = oldX + HEIGHT/8;
+ if(i%2==0)
+ canvas.drawText(oldX+"",oldX+10,centerY+40,mPaint);
+ oldX = oldX + WIDTH/8;
+
}
+
+
// 绘制坐标轴
canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, p);
canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p);
@@ -275,6 +273,44 @@ private void drawBackGround(SurfaceHolder holder) {
holder.unlockCanvasAndPost(canvas);
}
+ private void drawBackGround(Canvas canvas,int scale) {
+ // 绘制黑色背景
+ canvas.drawColor(Color.BLACK);
+ Paint p = new Paint();
+ p.setColor(Color.WHITE);
+ p.setStrokeWidth(5);
+ p.setTextSize(50);
+
+ // 画网格8*8
+ Paint mPaint = new Paint();
+ mPaint.setTextSize(50);
+ mPaint.setColor(Color.GRAY);// 网格为灰色
+ mPaint.setStrokeWidth(3);// 设置画笔粗细
+ int oldY = 0;
+ for (int i = 0; i <= 8; i++) {// 绘画横线
+ canvas.drawLine(0, oldY, WIDTH, oldY, mPaint);
+ if(spinner.getSelectedItemPosition()==0) {
+ if (i != 4)
+ canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, p);
+ }else
+ canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, p);
+ oldY = oldY + WIDTH / 8;
+
+ }
+ int oldX = 0;
+ for (int i = 0; i <= 8*scale; i++) {// 绘画纵线
+ canvas.drawLine(oldX, 0, oldX, HEIGHT, mPaint);
+ if(i%2==0)
+ canvas.drawText(oldX+"",oldX+10,centerY+40,mPaint);
+ oldX = oldX + WIDTH/8;
+
+ }
+
+ // 绘制坐标轴
+ canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, p);
+ canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p);
+ }
+
public FourthpageFragment newInstance(int i) {
Bundle args = new Bundle();
args.putInt("int", i);
@@ -294,28 +330,96 @@ private void initService(){
localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter());
}
+ void testRandomDraw(){
+ Bitmap whiteBgBitmap = Bitmap.createBitmap(WIDTH*5,HEIGHT*5, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(whiteBgBitmap);
+ int scale=5;
+ drawBackGround(canvas,scale);
+ Paint mpaint = new Paint();
+ mpaint.setColor(Color.GREEN);
+ mpaint.setStrokeWidth(3);
+ int data[] = createRandomData();
+ float oldY=0;
+ float oldX=0;
+ float cx = 0;
+ for(int i=0;i<1024;i++) {
+ cx+=5;
+ canvas.drawLine(oldX,oldY+10,cx,data[i]+10,mpaint);
+ oldX=cx;
+ oldY = data[i];
+ }
+ showSurfaceView.setBitmap(whiteBgBitmap);
+ }
+
+ void testDraw(){
+ maxData=0;
+ final Iterator data=packageToData(packageList).iterator();//这里面会更新maxData
+ Bitmap whiteBgBitmap = Bitmap.createBitmap(WIDTH*5,HEIGHT, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(whiteBgBitmap);
+ drawBackGround(canvas,1);
+ Paint mpaint = new Paint();
+ mpaint.setColor(Color.GREEN);
+ mpaint.setStrokeWidth(3);
+ float oldY=0;
+ float oldX=0;
+ float cx = 0;
+ while(data.hasNext()){
+ float cy = centerY-(data.next()/maxData)*centerY;
+ //Log.d(TAG,"这是cy:"+cy+"");
+ canvas.drawLine(oldX,oldY+5,cx,cy+5,mpaint);
+ oldX = cx;
+ cx+=5;
+ oldY = cy;
+ }
+
+ canvas.drawBitmap(whiteBgBitmap,0,0,null);
+ showSurfaceView.setBitmap(whiteBgBitmap);
+
+ }
+
+ /**
+ * 生成随机数据数组用于测试
+ * @return
+ */
+ int[] createRandomData(){
+ int []data = new int[1024];
+ Random random = new Random();
+ for(int i=0;i<1024;i++)
+ data[i] = random.nextInt(500);
+ return data;
+ }
private void draw(){
- drawBackGround(holder);
+ maxData=0;
+ final Iterator data=packageToData(packageList).iterator();//这里面会更新maxData
+ drawBackGround(holder);
cx = X_OFFSET;
if (task != null) {
task.cancel();
}
- final Iterator data=packageToData(packageList).iterator();
task = new TimerTask() {
int startX = 0;
- int startY = centerY;
+ float startY = centerY;
+ Bitmap mbmpTest = Bitmap.createBitmap(WIDTH,HEIGHT, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(mbmpTest);
@Override
public void run() {
+
if(!data.hasNext()){
task.cancel();
task = null;
+ Canvas cv = holder.lockCanvas();
+ cv.drawBitmap(mbmpTest,10,10,null);
+ holder.unlockCanvasAndPost(cv);
+ return;
}
- int cy = centerY-data.next();
+ float cy = 10;//centerY-(data.next()/maxData)*centerY;
// Log.d(TAG,cy+"");
- Canvas canvas = holder.lockCanvas(new Rect(cx-10, cy - 900,
- cx + 10, cy + 900));
+// Canvas canvas = holder.lockCanvas(new Rect(cx-1, (int)cy - 900,
+// cx + 1, (int)cy + 900));
+
+
// 根据X,Y坐标画线
canvas.drawLine(startX, startY ,cx, cy, paint);
@@ -324,31 +428,68 @@ public void run() {
startX = cx;
startY = cy;
- cx+=10;
+ cx+=1;
// 超过指定宽度,线程取消,停止画曲线
if (cx > WIDTH) {
task.cancel();
task = null;
}
// 提交修改
- holder.unlockCanvasAndPost(canvas);
+ // holder.unlockCanvasAndPost(canvas);
}
};
- timer.schedule(task, 0, 30);
+ timer.schedule(task, 0, 5);
}
- private ArrayList packageToData(ArrayList packageList){
- ArrayList data = new ArrayList<>();
+ /**
+ * 剔除应答报文并将数据包转为可用数据
+ * @param packageList
+ * @return
+ */
+ private ArrayList packageToData(ArrayList packageList){
+ ArrayList data = new ArrayList<>();
byte[] package1 = new byte[12];
- System.arraycopy(packageList.get(0), 8, package1, 0, 12);
+ try {
+ System.arraycopy(packageList.get(0), 8, package1, 0, 12);
+ }catch(Exception e){
+ ErrorDialog ed = new ErrorDialog(getContext(),"");
+ ed.show();
+ Log.d(TAG,e.toString());
+ }
+
for(byte i: package1)
Log.d(TAG,i+"");
packageList.set(0,package1);
+ float current;
for(byte[] i:packageList){
for(int j=0; jmaxData?current:maxData;
+ minData = current maxData ? current : maxData;
+ data.add(current);
+ }break;
+ case 2:{
+ current=util.byte2ToUnsignedShort(i[j], i[j + 1])/10;
+ maxData = current > maxData ? current : maxData;
+ data.add(current);
+ }break;
+ }
+
}
}
+ average = (maxData-minData)/2;
+ Log.d(TAG,"data长度"+data.size());
+// for(float i: data){
+// Log.d(TAG,i+"");
+// }
return data;
}
@@ -364,12 +505,13 @@ public void onReceive(Context context, Intent intent) {
if (mDrawing) {
byte[] message = intent.getByteArrayExtra(BLEService.EXTRA_MESSAGE_DATA);
packageList.add(message);
- if(packageCount==102)
- draw();
+ Log.d(TAG,util.toHexString(message,true)+"\n"+packageCount+"");
+ if(packageCount==102){//102
+ //draw();
+ testDraw();
+ }
packageCount++;
- Log.d("ff",util.toHexString(message,true)+"\n"+packageCount+"");
- //final int info = Integer.valueOf(message.substring(9, 11)) + Integer.valueOf(message.substring(12, 14)) * 256;
}
}
else if(action.equals(BLEService.ACTION_GATT_DISCONNECTED)) {
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/MySurfaceView3.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/MySurfaceView3.java
new file mode 100644
index 0000000..f24cf2c
--- /dev/null
+++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/MySurfaceView3.java
@@ -0,0 +1,280 @@
+package com.kinco.MotorApp.ui.fourthpage;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.PointF;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.View;
+import android.graphics.Rect;
+import android.graphics.Bitmap;
+
+
+
+public class MySurfaceView3 extends SurfaceView implements
+ SurfaceHolder.Callback, View.OnTouchListener {
+
+ private static final int NONE = 0;// 原始
+ private static final int DRAG = 1;// 拖动
+ private static final int ZOOM = 2;// 放大
+ private int mStatus = NONE;
+
+ private static final float MAX_ZOOM_SCALE = 4.0f;
+ private static final float MIN_ZOOM_SCALE = 1.0f;
+ private static final float FLOAT_TYPE = 1.0f;
+ private float mCurrentMaxScale = MAX_ZOOM_SCALE;
+ private float mCurrentScale = 1.0f;
+
+ private Rect mRectSrc = new Rect(); // used for render image.
+ private Rect mRectDes = new Rect(); // used for store size of monitor.
+
+ private int mCenterX, mCenterY;
+ int mSurfaceHeight, mSurfaceWidth, mImageHeight, mImageWidth;
+
+ private PointF mStartPoint = new PointF();
+ private float mStartDistance = 0f;
+
+ private SurfaceHolder mSurHolder = null;
+ private Bitmap mBitmap;
+
+ public MySurfaceView3(Context context, AttributeSet attrs) {
+ super(context,attrs);
+ mSurHolder = getHolder();
+ mSurHolder.addCallback(this);
+ this.setOnTouchListener(this);
+
+ }
+
+ private void init() {
+ mCurrentMaxScale = Math.max(
+ MIN_ZOOM_SCALE,
+ 4 * Math.min(FLOAT_TYPE * mImageHeight / mSurfaceHeight, 1.0f
+ * mImageWidth / mSurfaceWidth));
+ mCurrentScale = MIN_ZOOM_SCALE;
+ mCenterX = mImageWidth / 2;
+ mCenterY = mImageHeight / 2;
+ calcRect();
+
+ }
+
+ private void adjustCenter() {
+ int w = mRectSrc.right - mRectSrc.left;
+ int h = mRectSrc.bottom - mRectSrc.top;
+
+ if (mCenterX - w / 2 < 0) {
+ mCenterX = w / 2;
+ mRectSrc.left = 0;
+ mRectSrc.right = w;
+ } else if (mCenterX + w / 2 >= mImageWidth) {
+ mCenterX = mImageWidth - w / 2;
+ mRectSrc.right = mImageWidth;
+ mRectSrc.left = mRectSrc.right - w;
+
+ } else {
+ mRectSrc.left = mCenterX - w / 2;
+ mRectSrc.right = mRectSrc.left + w;
+ }
+
+ if (mCenterY - h / 2 < 0) {
+ mCenterY = h / 2;
+ mRectSrc.top = 0;
+ mRectSrc.bottom = h;
+ } else if (mCenterY + h / 2 >= mImageHeight) {
+ mCenterY = mImageHeight - h / 2;
+ mRectSrc.bottom = mImageHeight;
+ mRectSrc.top = mRectSrc.bottom - h;
+ } else {
+ mRectSrc.top = mCenterY - h / 2;
+ mRectSrc.bottom = mRectSrc.top + h;
+ }
+ Log.d("fourth","在计算中心");
+
+ }
+
+ private void calcRect() {
+ int w, h;
+ float imageRatio, surfaceRatio;
+ imageRatio = FLOAT_TYPE * mImageWidth / mImageHeight;
+ surfaceRatio = FLOAT_TYPE * mSurfaceWidth / mSurfaceHeight;
+
+ if (imageRatio < surfaceRatio) {
+ h = mSurfaceHeight;
+ w = (int) (h * imageRatio);
+ } else {
+ w = mSurfaceWidth;
+ h = (int) (w / imageRatio);
+ }
+
+ if (mCurrentScale > MIN_ZOOM_SCALE) {
+ w = Math.min(mSurfaceWidth, (int) (w * mCurrentScale));
+ h = Math.min(mSurfaceHeight, (int) (h * mCurrentScale));
+ } else {
+ mCurrentScale = MIN_ZOOM_SCALE;
+ }
+
+ mRectDes.left = (mSurfaceWidth - w) / 2;
+ mRectDes.top = (mSurfaceHeight - h) / 2;
+ mRectDes.right = mRectDes.left + w;
+ mRectDes.bottom = mRectDes.top + h;
+
+ float curImageRatio = FLOAT_TYPE * w / h;
+ int h2, w2;
+ if (curImageRatio > imageRatio) {
+ h2 = (int) (mImageHeight / mCurrentScale);
+ w2 = (int) (h2 * curImageRatio);
+ } else {
+
+ w2 = (int) (mImageWidth / mCurrentScale);
+ h2 = (int) (w2 / curImageRatio);
+ }
+ mRectSrc.left = mCenterX - w2 / 2;
+ mRectSrc.top = mCenterY - h2 / 2;
+ mRectSrc.right = mRectSrc.left + w2;
+ mRectSrc.bottom = mRectSrc.top + h2;
+ }
+
+ public void setMaxZoom(float value) {
+ mCurrentMaxScale = value;
+ }
+
+ public void setBitmap(Bitmap b) {
+
+ if (b == null) {
+ return;
+ }
+ synchronized (MySurfaceView3.class) {
+ mBitmap = b;
+ if (mImageHeight != mBitmap.getHeight()
+ || mImageWidth != mBitmap.getWidth()) {
+ mImageHeight = mBitmap.getHeight();
+ mImageWidth = mBitmap.getWidth();
+ init();
+ }
+ showBitmap();
+ }
+
+ }
+
+ private void showBitmap() {
+ synchronized (MySurfaceView3.class) {
+ Canvas c = getHolder().lockCanvas();
+ if (c != null && mBitmap != null) {
+ c.drawColor(Color.GRAY);
+ c.drawBitmap(mBitmap, mRectSrc, mRectDes, null);
+ getHolder().unlockCanvasAndPost(c);
+ }
+ }
+ }
+
+ private void dragAction(MotionEvent event) {
+
+ synchronized (MySurfaceView3.class) {
+ PointF currentPoint = new PointF();
+ currentPoint.set(event.getX(), event.getY());
+ int offsetX = (int) currentPoint.x - (int) mStartPoint.x;
+ int offsetY = (int) currentPoint.y - (int) mStartPoint.y;
+ mStartPoint = currentPoint;
+
+ mCenterX -= offsetX;
+ mCenterY -= offsetY;
+
+ adjustCenter();
+ showBitmap();
+ }
+ }
+
+ private void zoomAcition(MotionEvent event) {
+
+ synchronized (MySurfaceView3.class) {
+
+ float newDist = spacing(event);
+ float scale = newDist / mStartDistance;
+ mStartDistance = newDist;
+
+ mCurrentScale *= scale;
+ mCurrentScale = Math.max(FLOAT_TYPE,
+ Math.min(mCurrentScale, mCurrentMaxScale));
+
+ calcRect();
+ adjustCenter();
+ showBitmap();
+
+ }
+ }
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ switch (event.getAction() & MotionEvent.ACTION_MASK) {
+ case MotionEvent.ACTION_DOWN:
+ mStartPoint.set(event.getX(), event.getY());
+ mStatus = DRAG;
+ break;
+
+ case MotionEvent.ACTION_POINTER_DOWN:
+ float distance = spacing(event);
+ if (distance > 10f) {
+
+ mStatus = ZOOM;
+ mStartDistance = distance;
+ }
+
+ break;
+
+ case MotionEvent.ACTION_MOVE:
+ if (mStatus == DRAG) {
+ dragAction(event);
+ } else {
+
+ if (event.getPointerCount() == 1)
+ return true;
+ zoomAcition(event);
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_POINTER_UP:
+ mStatus = NONE;
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
+
+ private float spacing(MotionEvent event) {
+ float x = event.getX(0) - event.getX(1);
+ float y = event.getY(0) - event.getY(1);
+ return (float) Math.sqrt(x * x + y * y);
+ }
+
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+ // TODO Auto-generated method stub
+ }
+
+ // 初始化
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width,
+ int height) {
+
+ synchronized (MySurfaceView3.class) {
+ mRectDes.set(0, 0, width, height);
+ mSurfaceHeight = height;
+ mSurfaceWidth = width;
+ init();
+ if (mBitmap != null) {
+ showBitmap();
+ }
+ }
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/function.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/function.java
new file mode 100644
index 0000000..cd85ee9
--- /dev/null
+++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/function.java
@@ -0,0 +1,69 @@
+package com.kinco.MotorApp.ui.fourthpage;
+
+public class function {
+}
+// showSurfaceView.setOnTouchListener(new View.OnTouchListener()
+// {
+//
+// @Override
+// public boolean onTouch(View view, MotionEvent event) {
+// SurfaceView imageView = (SurfaceView) view;
+// switch (event.getAction()&MotionEvent.ACTION_MASK) {
+// case MotionEvent.ACTION_DOWN:
+// savedMatrix.set(matrix);
+// start.set(event.getX(), event.getY());
+// mode = MOVE;
+// rotate = NONE;
+// break;
+// case MotionEvent.ACTION_UP:
+// case MotionEvent.ACTION_POINTER_UP:
+// mode = NONE;
+// break;
+// case MotionEvent.ACTION_POINTER_DOWN:
+// oldDistance = (float)Math.sqrt((event.getX(0)-event.getX(1))*(event.getX(0)-event.getX(1))+(event.getY(0)-event.getY(1))*(event.getY(0)-event.getY(1)));
+// if (oldDistance > 10f) {
+// savedMatrix.set(matrix);
+// mid.set((event.getX(0)+event.getX(1))/2, (event.getY(0)+event.getY(1))/2);
+// mode = ZOOM;
+// }
+// case MotionEvent.ACTION_MOVE:
+// if (mode == MOVE)
+// {
+// if(rotate == NONE) {
+// savedMatrix.set(matrix);
+// mid.set(event.getX(), event.getY());
+// rotate = ROTATION;
+// }
+// else {
+// matrix.set(savedMatrix);
+// double a = Math.atan((mid.y-start.y)/(mid.x-start.x));
+// double b = Math.atan((event.getY()-mid.y)/(event.getX()-mid.x));
+// if ((b - a < Math.PI/2 && b - a > Math.PI / 18)||((b + Math.PI) % Math.PI - a < Math.PI/2 && (b + Math.PI) % Math.PI - a > Math.PI / 18)) {
+// matrix.postScale((float)0.9, (float)0.9);
+// }
+// else if ((a - b < Math.PI / 2 && a - b > Math.PI / 18)||((a + Math.PI) % Math.PI - b < Math.PI/2 && (a + Math.PI) % Math.PI - b > Math.PI / 18)) {
+// matrix.postScale((float)1.1, (float)1.1);
+// }
+// start.set(event.getX(), event.getY());
+// rotate = NONE;
+// }
+// }
+// else if(mode == ZOOM)
+// {
+// float newDistance;
+// newDistance = (float)Math.sqrt((event.getX(0)-event.getX(1))*(event.getX(0)-event.getX(1))+(event.getY(0)-event.getY(1))*(event.getY(0)-event.getY(1)));
+// if(newDistance > 10f) {
+// matrix.set(savedMatrix);
+// matrix.postScale(newDistance/oldDistance, newDistance/oldDistance, mid.x, mid.y);
+// oldDistance = newDistance;
+// savedMatrix.set(matrix);
+// }
+// }
+// break;
+// }
+// imageView.
+// imageView.setImageMatrix(matrix);
+// return true;
+// }
+//
+// });
\ No newline at end of file
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java
index eebb208..d295c60 100644
--- a/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java
+++ b/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java
@@ -85,30 +85,21 @@ public void onActivityCreated(Bundle savedInstanceState) {
private void initService(){
//绑定服务
Intent BLEIntent = new Intent(getActivity(), BLEService.class);
- getActivity().bindService(BLEIntent,new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mBluetoothLeService = ((BLEService.localBinder) service)
- .getService();
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {
- }
- }, Context.BIND_AUTO_CREATE);
+ getActivity().bindService(BLEIntent,connection, Context.BIND_AUTO_CREATE);
localBroadcastManager = LocalBroadcastManager.getInstance(getContext());
localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter());
}
@Override
- public void onResume() {
- super.onResume();
+ public void onStart() {
+ super.onStart();
initService();
}
@Override
- public void onPause() {
- super.onPause();
-// localBroadcastManager.unregisterReceiver(receiver);
+ public void onStop() {
+ super.onStop();
+ localBroadcastManager.unregisterReceiver(receiver);
}
public SecondpageFragment newInstance(int i) {
@@ -156,7 +147,6 @@ public void run() {
addressState = "0101";
adapter.notifyDataSetChanged();
delayRead(addressState);
- mBluetoothLeService.readData(addressState,"0001");
return;
}
if (addressState.equals("0101")) {
@@ -239,4 +229,19 @@ public void run() {
}
},1000);
}
+ /**
+ * 得到服务实例
+ */
+ private ServiceConnection connection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ mBluetoothLeService = ((BLEService.localBinder) service)
+ .getService();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+
+ }
+ };
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java
index 83d47ca..b44bc10 100644
--- a/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java
+++ b/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java
@@ -62,34 +62,26 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initUI();
- initService();
}
@Override
- public void onResume() {
- super.onResume();
- localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter());
+ public void onStart() {
+ super.onStart();
+ initService();
+ //util.centerToast(getContext(),"3的服务被开启",0);
}
@Override
- public void onPause() {
- super.onPause();
+ public void onStop() {
+ super.onStop();
localBroadcastManager.unregisterReceiver(receiver);
+ //util.centerToast(getContext(),"我被停啦",0);
}
private void initService(){
//绑定服务
Intent BLEIntent = new Intent(getActivity(), BLEService.class);
- getActivity().bindService(BLEIntent,new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mBluetoothLeService = ((BLEService.localBinder) service)
- .getService();
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {
- }
- }, Context.BIND_AUTO_CREATE);
+ getActivity().bindService(BLEIntent,connection,Context.BIND_AUTO_CREATE);
localBroadcastManager =LocalBroadcastManager.getInstance(getContext());
localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter());
}
@@ -159,7 +151,7 @@ public void onReceive(Context context, Intent intent) {
if(state.equals("read"))
currentValue.setText(util.toHexString(message,3));
if(state.equals("write"))
- util.centerToast(context,"succeed!",Toast.LENGTH_SHORT);
+ util.centerToast(context,"succeed!!!",Toast.LENGTH_SHORT);
}
else if(action.equals(BLEService.ACTION_GATT_DISCONNECTED)) {
@@ -174,4 +166,20 @@ else if(action.equals(BLEService.ACTION_ERROR_CODE)) {
}
}
}
+
+ /**
+ * 得到服务实例
+ */
+ private ServiceConnection connection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ mBluetoothLeService = ((BLEService.localBinder) service)
+ .getService();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+
+ }
+ };
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kinco/MotorApp/util.java b/app/src/main/java/com/kinco/MotorApp/util.java
index afa6bdf..6f31411 100644
--- a/app/src/main/java/com/kinco/MotorApp/util.java
+++ b/app/src/main/java/com/kinco/MotorApp/util.java
@@ -11,6 +11,8 @@
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+import android.content.BroadcastReceiver;
import com.kinco.MotorApp.BluetoothService.BLEService;
@@ -19,6 +21,9 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
/**
* @author: Nicholas
@@ -201,5 +206,38 @@ public static void saveLog(Context context,String filename,String str){
}
}
+ public static boolean isRegister(LocalBroadcastManager manager,String action) {
+ boolean isRegister = false;
+ try {
+ Field mReceiversField = manager.getClass().getDeclaredField("mReceivers");
+ mReceiversField.setAccessible(true);
+// String name = mReceiversField.getName();
+ HashMap> mReceivers = (HashMap>) mReceiversField.get(manager);
+
+ for (BroadcastReceiver key : mReceivers.keySet()) {
+ ArrayList intentFilters = mReceivers.get(key);
+// MyLogUtil.e("Key: " + key + " Value: " + intentFilters);
+ for (int i = 0; i < intentFilters.size(); i++) {
+ IntentFilter intentFilter = (IntentFilter) intentFilters.get(i);
+ Field mActionsField = intentFilter.getClass().getDeclaredField("mActions");
+ mActionsField.setAccessible(true);
+ ArrayList mActions = (ArrayList) mActionsField.get(intentFilter);
+ for (int j = 0; j < mActions.size(); j++) {
+ if (mActions.get(i).equals(action)) {
+ isRegister = true;
+ break;
+ }
+ }
+ }
+ }
+
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ return isRegister;
+ }
+
}
diff --git a/app/src/main/res/color/color_radiobutton.xml b/app/src/main/res/color/color_radiobutton.xml
index 88ec0e7..55f46d2 100644
--- a/app/src/main/res/color/color_radiobutton.xml
+++ b/app/src/main/res/color/color_radiobutton.xml
@@ -1,6 +1,6 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_edittext.xml b/app/src/main/res/layout/item_edittext.xml
index e8933f4..ffe54b4 100644
--- a/app/src/main/res/layout/item_edittext.xml
+++ b/app/src/main/res/layout/item_edittext.xml
@@ -55,7 +55,7 @@
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/osc_page.xml b/app/src/main/res/layout/osc_page.xml
index eaddf43..fce2da7 100644
--- a/app/src/main/res/layout/osc_page.xml
+++ b/app/src/main/res/layout/osc_page.xml
@@ -15,39 +15,32 @@
android:gravity="center_horizontal"
android:orientation="horizontal" >
-
-
-
+ android:layout_height="match_parent"
+ android:entries="@array/osc_item"
+ android:spinnerMode="dropdown" />
+ android:text="Show"
+ android:textAllCaps="false" />
+
-
+
+
+
+
diff --git a/app/src/main/res/values/osc_item.xml b/app/src/main/res/values/osc_item.xml
new file mode 100644
index 0000000..be1d9f6
--- /dev/null
+++ b/app/src/main/res/values/osc_item.xml
@@ -0,0 +1,8 @@
+
+
+
+ - Output frequency
+ - Output voltage
+ - Output current
+
+
\ No newline at end of file