Browse Source

1.添加主活动流布局背景图片;
2.添加图片资源;
3.完善基本设备的数据发送逻辑;
4.完善基本设备的数据接收及视图刷新逻辑。

Yumin 6 years ago
parent
commit
fa6524497e

+ 8 - 1
app/src/main/java/cn/minbb/producttester/adapter/WaterfallStaggeredAdapter.java

@@ -2,9 +2,11 @@ package cn.minbb.producttester.adapter;
 
 import android.content.Context;
 import android.graphics.Color;
+import android.graphics.drawable.Drawable;
 import android.support.v7.widget.RecyclerView;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ImageView;
 
 import com.joanzapata.iconify.widget.IconTextView;
 
@@ -40,6 +42,7 @@ public class WaterfallStaggeredAdapter extends RecyclerView.Adapter<WaterfallSta
     @Override
     public void onBindViewHolder(ViewHolder holder, int position) {
         holder.itemView.setTag(itemBeen.get(position).id);
+        holder.image.setImageDrawable(itemBeen.get(position).image);
         holder.nameText.setText(itemBeen.get(position).nameText);
         holder.introductionText.setText(itemBeen.get(position).introductionText);
         holder.introductionText.setBackgroundColor(Color.parseColor(ColorUtil.getRandomColor(36)));
@@ -65,6 +68,8 @@ public class WaterfallStaggeredAdapter extends RecyclerView.Adapter<WaterfallSta
     // ViewHolder 用于缓存控件
     class ViewHolder extends RecyclerView.ViewHolder {
 
+        @BindView(R.id.image)
+        ImageView image;
         @BindView(R.id.nameText)
         IconTextView nameText;
         @BindView(R.id.introductionText)
@@ -79,11 +84,13 @@ public class WaterfallStaggeredAdapter extends RecyclerView.Adapter<WaterfallSta
     public static class ItemBean {
 
         String id;
+        Drawable image;
         String nameText;
         String introductionText;
 
-        public ItemBean(String id, String nameText, String introductionText) {
+        public ItemBean(String id, Drawable image, String nameText, String introductionText) {
             this.id = id;
+            this.image = image;
             this.nameText = nameText;
             this.introductionText = introductionText;
         }

+ 1 - 1
app/src/main/java/cn/minbb/producttester/ctrl/BluetoothChatService.java

@@ -71,7 +71,7 @@ public class BluetoothChatService {
         mAdapter = BluetoothAdapter.getDefaultAdapter();
         mState = STATE_NONE;
         mHandler = handler;
-        setDelayTime(100);
+        setDelayTime(200);
     }
 
     /**

+ 53 - 17
app/src/main/java/cn/minbb/producttester/views/BasicDeviceActivity.java

@@ -18,6 +18,7 @@ import android.view.MenuItem;
 import android.view.View;
 import android.widget.Toast;
 
+import com.alibaba.fastjson.JSONObject;
 import com.joanzapata.iconify.widget.IconTextView;
 
 import java.io.UnsupportedEncodingException;
@@ -33,6 +34,7 @@ import cn.minbb.producttester.R;
 import cn.minbb.producttester.adapter.BasicDeviceAdapter;
 import cn.minbb.producttester.ctrl.App;
 import cn.minbb.producttester.ctrl.BluetoothChatService;
+import cn.minbb.producttester.utils.DataTranslation;
 
 public class BasicDeviceActivity extends AppCompatActivity {
 
@@ -46,6 +48,11 @@ public class BasicDeviceActivity extends AppCompatActivity {
     private BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
     private BluetoothChatService chatService = null;
 
+    private BasicDeviceAdapter basicDeviceAdapter;
+    private List<BasicDeviceAdapter.ItemBean> itemBeanList = new ArrayList<>();
+    // 输出流缓冲区
+    private StringBuffer outStringBuffer;
+
     static {
         AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
     }
@@ -58,14 +65,8 @@ public class BasicDeviceActivity extends AppCompatActivity {
 
         App.setupActionBar(this);
         noDevice.setVisibility(View.VISIBLE);
-        List<BasicDeviceAdapter.ItemBean> itemBeanList = new ArrayList<>();
-        itemBeanList.add(new BasicDeviceAdapter.ItemBean("123", "456"));
-        itemBeanList.add(new BasicDeviceAdapter.ItemBean("321", "654"));
-        itemBeanList.add(new BasicDeviceAdapter.ItemBean("789", "987"));
-        itemBeanList.add(new BasicDeviceAdapter.ItemBean("123", "456"));
-        itemBeanList.add(new BasicDeviceAdapter.ItemBean("321", "654"));
-        itemBeanList.add(new BasicDeviceAdapter.ItemBean("789", "987"));
-        BasicDeviceAdapter basicDeviceAdapter = new BasicDeviceAdapter(this, itemBeanList);
+
+        basicDeviceAdapter = new BasicDeviceAdapter(this, itemBeanList);
         contentRecyclerView.setAdapter(basicDeviceAdapter);
         LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
         linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
@@ -166,14 +167,19 @@ public class BasicDeviceActivity extends AppCompatActivity {
                 startActivityForResult(new Intent(BasicDeviceActivity.this, ScanDeviceActivity.class), 0);
                 break;
             case R.id.opUp:
+                sendDataToDevice("UD\r\nUU\r\n", false);
                 break;
             case R.id.opLeft:
+                sendDataToDevice("LD\r\nLU\r\n", false);
                 break;
             case R.id.opCenter:
+                sendDataToDevice("SD\r\nSU\r\n", false);
                 break;
             case R.id.opRight:
+                sendDataToDevice("RD\r\nRU\r\n", false);
                 break;
             case R.id.opDown:
+                sendDataToDevice("DD\r\nDU\n", false);
                 break;
         }
     }
@@ -193,6 +199,27 @@ public class BasicDeviceActivity extends AppCompatActivity {
         }
     }
 
+    private void sendDataToDevice(String data, boolean hex) {
+        // 确保已连接
+        if (null == chatService || chatService.getState() != BluetoothChatService.STATE_CONNECTED) {
+            Toast.makeText(this, "设备未连接", Toast.LENGTH_SHORT).show();
+            return;
+        }
+        // 检测是否有字符串发送
+        if (data.length() > 0) {
+            // 获取字符串并告诉 BluetoothChatService 发送
+            if (hex) {
+                chatService.write(DataTranslation.hexString2Bytes(data));
+            } else {
+                chatService.write(data.getBytes());
+            }
+            // 清空输出缓冲区
+            outStringBuffer.setLength(0);
+        } else {
+            Toast.makeText(this, "发送内容不能为空", Toast.LENGTH_SHORT).show();
+        }
+    }
+
     @SuppressLint("HandlerLeak")
     private final Handler mHandler = new Handler() {
         @Override
@@ -227,16 +254,24 @@ public class BasicDeviceActivity extends AppCompatActivity {
                     } catch (UnsupportedEncodingException e) {
                         e.printStackTrace();
                     }
-                    System.err.println("/" + readMessage);
-
-                    Pattern p = Pattern.compile("\\{.*?\\}");
-                    Matcher m = p.matcher(readMessage);
-                    // 判断正则表达式是否匹配到
-                    if (m.find()) {
-                        System.out.println(m.group());
-                    } else {
-                        System.out.println("未找到");
+                    if (null != readMessage) {
+                        System.err.println("/" + readMessage);
+                        Pattern p = Pattern.compile("\\{.*?\\}");
+                        Matcher m = p.matcher(readMessage);
+                        // 判断正则表达式是否匹配到
+                        if (m.find()) {
+                            String data = m.group();
+                            JSONObject jsonObject = JSONObject.parseObject(data);
+                            itemBeanList.clear();
+                            for (String key : jsonObject.keySet()) {
+                                itemBeanList.add(new BasicDeviceAdapter.ItemBean(key, jsonObject.getString(key)));
+                            }
+                            basicDeviceAdapter.notifyDataSetChanged();
+                        } else {
+                            System.out.println("未匹配到数据");
+                        }
                     }
+
                     //检错误码计算函数
 //                    if (inhex == true) {
 //                        String readMessage = " " + Data_syn.bytesToHexString(readBuf, msg.arg1);
@@ -255,6 +290,7 @@ public class BasicDeviceActivity extends AppCompatActivity {
                 case BluetoothChatService.MESSAGE_TOAST:
                     Toast.makeText(getApplicationContext(), msg.getData().getString(BluetoothChatService.TOAST), Toast.LENGTH_SHORT).show();
                     break;
+                default:
             }
         }
     };

+ 1 - 3
app/src/main/java/cn/minbb/producttester/views/MainActivity.java

@@ -113,9 +113,7 @@ public class MainActivity extends AppCompatActivity implements
 
         mainTab_1_recycle = page_1.findViewById(R.id.mainTab_1_recycle);
         List<WaterfallStaggeredAdapter.ItemBean> itemBeanList = new ArrayList<>();
-        itemBeanList.add(new WaterfallStaggeredAdapter.ItemBean("1", "基础设备", "适用于通过蓝牙连接的基本STM32控制器"));
-        itemBeanList.add(new WaterfallStaggeredAdapter.ItemBean("2", "321", "654"));
-        itemBeanList.add(new WaterfallStaggeredAdapter.ItemBean("3", "789", "987"));
+        itemBeanList.add(new WaterfallStaggeredAdapter.ItemBean("1", getResources().getDrawable(R.drawable.image_board_32), "监控调试层", "适用于通过蓝牙连接的基本STM32控制器 - HMI组件"));
         WaterfallStaggeredAdapter waterfallStaggeredAdapter = new WaterfallStaggeredAdapter(this, itemBeanList);
         waterfallStaggeredAdapter.setOnItemClickListener(this);
         mainTab_1_recycle.setAdapter(waterfallStaggeredAdapter);

BIN
app/src/main/res/drawable/image_board_32.jpg


+ 15 - 1
app/src/main/res/layout/item_waterfall_staggered.xml

@@ -21,6 +21,18 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
+            <ImageView
+                android:id="@+id/image"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:contentDescription=""
+                android:scaleType="centerCrop"
+                android:src="@drawable/image_board_32"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
             <com.joanzapata.iconify.widget.IconTextView
                 android:id="@+id/nameText"
                 style="@style/TextAppearance.AppCompat.Title"
@@ -28,9 +40,10 @@
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
                 android:layout_marginStart="8dp"
-                android:layout_marginTop="48dp"
+                android:layout_marginTop="60dp"
                 android:layout_marginBottom="4dp"
                 android:text="name"
+                android:textColor="@android:color/black"
                 app:layout_constraintBottom_toTopOf="@+id/introductionText"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent"
@@ -45,6 +58,7 @@
                 android:maxLines="4"
                 android:padding="8dp"
                 android:text="introduction"
+                android:textColor="@android:color/black"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent" />