设备在线情况 进度页面完成

master
wenfei 1 month ago
parent be984e0d2f
commit 761ec4b0fd

@ -169,6 +169,8 @@ dependencies {
implementation libs.androidx.emoji.bundled implementation libs.androidx.emoji.bundled
// //
implementation libs.barcode.scanning implementation libs.barcode.scanning
// //
// implementation 'io.github.lilongweidev:easyview:1.0.6'
// implementation('org.dom4j:dom4j:2.1.3') { // implementation('org.dom4j:dom4j:2.1.3') {
// exclude group: 'pull-parser', module: 'pull-parser' // exclude group: 'pull-parser', module: 'pull-parser'

@ -82,6 +82,7 @@
tools:replace="android:allowBackup" tools:replace="android:allowBackup"
tools:targetApi="s"> tools:targetApi="s">
<meta-data <meta-data
android:name="design_width" android:name="design_width"
android:value="768" /> android:value="768" />
@ -448,6 +449,12 @@
<activity <activity
android:name=".ui.activity.DeviceAlarmInfoLineChartActivity" android:name=".ui.activity.DeviceAlarmInfoLineChartActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity
android:name=".ui.activity.DeviceEntryActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.activity.DeviceOnlineStatusActivity"
android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.YdckglActivity" android:name=".ui.activity.YdckglActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />

@ -55,9 +55,10 @@ public class Contans {
//public static String BASE_URL_EXTRANET = "https://172.16.25.75:7082/"; //public static String BASE_URL_EXTRANET = "https://172.16.25.75:7082/";
//App巡检点检外网服务器 //App巡检点检外网服务器
public static String IP_EXTRANET = "https://219.131.195.3:7081/"; public static String IP_EXTRANET = "https://219.131.195.3:7081/";
//public static String IP_EXTRANET = "https://172.16.25.75:7081/";
// public static String BASE_URL_EXTRANET = "http://192.168.2.215:8082/";//app公司内网开发服务器 // public static String BASE_URL_EXTRANET = "http://192.168.2.215:8082/";//app公司内网开发服务器
// public static String IP_EXTRANET = "http://192.168.2.215:9005/";
@ -69,11 +70,13 @@ public class Contans {
public static String BASE_URL_COMPANY_SERVER_INTRANET= "https://mobile.zhp.geg.com.cn:7011/"; public static String BASE_URL_COMPANY_SERVER_INTRANET= "https://mobile.zhp.geg.com.cn:7011/";
//智慧安防平台登录 电厂外网 //智慧安防平台登录 电厂外网
public static String BASE_URL_COMPANY_SERVER_EXTRANET= "https://219.131.195.3:7011/"; public static String BASE_URL_COMPANY_SERVER_EXTRANET= "https://219.131.195.3:7011/";
//public static String BASE_URL_COMPANY_SERVER_EXTRANET= "https://172.16.25.75:7011/";
//AI三维可视化安防平台登录 电厂内网 //AI三维可视化安防平台登录 电厂内网
//public static String BASE_URL_AI_3D_SERVER_INTRANET= "http://10.19.0.114:8100/"; //public static String BASE_URL_AI_3D_SERVER_INTRANET= "http://10.19.0.114:8100/";
public static String BASE_URL_AI_3D_SERVER_INTRANET= "https://mobile.zhp.geg.com.cn:7100/"; public static String BASE_URL_AI_3D_SERVER_INTRANET= "https://mobile.zhp.geg.com.cn:7100/";
//AI三维可视化安防平台登录 电厂外网 //AI三维可视化安防平台登录 电厂外网
public static String BASE_URL_AI_3D_SERVER_EXTRANET= "https://219.131.195.3:7100/"; public static String BASE_URL_AI_3D_SERVER_EXTRANET= "https://219.131.195.3:7100/";
//public static String BASE_URL_AI_3D_SERVER_EXTRANET= "https://172.16.25.75:7100/";
//腾讯浏览服务key //腾讯浏览服务key
public static String TBS_LICENSE_KEY= "4ktUk0LXU2iC2Dx/oesZcwiKAOZ4YXvjSQ4OFCcx+5e1csWD0cYNfCdXe2LpY+mB"; public static String TBS_LICENSE_KEY= "4ktUk0LXU2iC2Dx/oesZcwiKAOZ4YXvjSQ4OFCcx+5e1csWD0cYNfCdXe2LpY+mB";
//考试列表页面刷新数据 //考试列表页面刷新数据
@ -536,6 +539,8 @@ public class Contans {
//设备预警信息列表 //设备预警信息列表
//http://10.19.0.17:1700/dserver/device/vibration/monitoring/list?deviceCode=002c005e&startTime=2026-01-21+14:37:00&endTime=2026-01-22+23:59:59&v=1769063841074 //http://10.19.0.17:1700/dserver/device/vibration/monitoring/list?deviceCode=002c005e&startTime=2026-01-21+14:37:00&endTime=2026-01-22+23:59:59&v=1769063841074
public final static String DeviceAlermInfoDataListUrl = "dserver/device/vibration/monitoring/list"; public final static String DeviceAlermInfoDataListUrl = "dserver/device/vibration/monitoring/list";
public final static String DeviceOnlineStatusUrl = "dserver/device/online/data";
public final static String DeviceOnlineStatusListUrl = "dserver/device/list";
//人员组织结构模块 用户验证接口token //人员组织结构模块 用户验证接口token
public final static String AUTHENTICATIONLOGINTOKEN = "AUTHENTICATIONLOGINTOKEN"; public final static String AUTHENTICATIONLOGINTOKEN = "AUTHENTICATIONLOGINTOKEN";
//人员组织结构模块 下次登录时间 //人员组织结构模块 下次登录时间

@ -0,0 +1,56 @@
package com.rehome.zhdcoa.bean;
import java.util.List;
public class DeviceOnlineStatusBean extends DeviceAlarmBaseBean{
private DeviceOnlineStatusData data;
public DeviceOnlineStatusData getData() {
return data;
}
public void setData(DeviceOnlineStatusData data) {
this.data = data;
}
public static class DeviceOnlineStatusData {
// --- 在线
private Integer onlineCount;
// --- 离线
private Integer offlineCount;
private List<String> onlineDevices;
private List<String> offlineDevices;
public Integer getOnlineCount() {
return onlineCount;
}
public void setOnlineCount(Integer onlineCount) {
this.onlineCount = onlineCount;
}
public Integer getOfflineCount() {
return offlineCount;
}
public void setOfflineCount(Integer offlineCount) {
this.offlineCount = offlineCount;
}
public List<String> getOnlineDevices() {
return onlineDevices;
}
public void setOnlineDevices(List<String> onlineDevices) {
this.onlineDevices = onlineDevices;
}
public List<String> getOfflineDevices() {
return offlineDevices;
}
public void setOfflineDevices(List<String> offlineDevices) {
this.offlineDevices = offlineDevices;
}
}
}

@ -116,7 +116,7 @@ class DeviceAlarmInfoActivity : BaseActivityOaToolbarViewBinding<ActivityDeviceA
} }
override fun initData() { override fun initData() {
authenticationLoginDeviceAlermInfoRsa() authenticationLoginDeviceAlarmInfoRsa()
} }
@ -139,7 +139,7 @@ class DeviceAlarmInfoActivity : BaseActivityOaToolbarViewBinding<ActivityDeviceA
} }
} }
private fun authenticationLoginDeviceAlermInfo() { private fun authenticationLoginDeviceAlarmInfoRsa() {
try { try {
//AI三维登录接口 //AI三维登录接口
val userName = Contans.SP.DeviceAlermInfoAccount val userName = Contans.SP.DeviceAlermInfoAccount

@ -20,7 +20,7 @@ class DeviceAlarmInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityD
override fun getToolbar() = binding.toolbarView.toolbar override fun getToolbar() = binding.toolbarView.toolbar
override fun initView() { override fun initView() {
initToolbar("设备预警信息详情", "曲线") { initToolbar("设备预警信息详情", "") {
if(deviceCode!=null){ if(deviceCode!=null){
val intent = Intent(context, DeviceAlarmInfoLineChartActivity::class.java) val intent = Intent(context, DeviceAlarmInfoLineChartActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)

@ -38,6 +38,7 @@ import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.utils.ViewPortHandler; import com.github.mikephil.charting.utils.ViewPortHandler;
import com.rehome.zhdcoa.Contans; import com.rehome.zhdcoa.Contans;
import com.rehome.zhdcoa.R; import com.rehome.zhdcoa.R;
import com.rehome.zhdcoa.base.BaseActivityOaToolbarViewBinding;
import com.rehome.zhdcoa.base.BaseViewBindingActivity; import com.rehome.zhdcoa.base.BaseViewBindingActivity;
import com.rehome.zhdcoa.bean.DeviceAlarmBaseBean; import com.rehome.zhdcoa.bean.DeviceAlarmBaseBean;
import com.rehome.zhdcoa.bean.DeviceAlarmInfoLineChartBean; import com.rehome.zhdcoa.bean.DeviceAlarmInfoLineChartBean;
@ -49,6 +50,7 @@ import com.rehome.zhdcoa.utils.HttpListener;
import com.rehome.zhdcoa.utils.NohttpUtils; import com.rehome.zhdcoa.utils.NohttpUtils;
import com.rehome.zhdcoa.weiget.DateTimeMinutePickDialog; import com.rehome.zhdcoa.weiget.DateTimeMinutePickDialog;
import com.rehome.zhdcoa.weiget.DateTimePickDialog; import com.rehome.zhdcoa.weiget.DateTimePickDialog;
import com.rehome.zhdcoa.weiget.OAToolbar;
import com.yolanda.nohttp.NoHttp; import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.RequestMethod; import com.yolanda.nohttp.RequestMethod;
import com.yolanda.nohttp.rest.Request; import com.yolanda.nohttp.rest.Request;
@ -66,7 +68,7 @@ import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.SSLSocketFactory;
public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<ActivityDeviceAlarmInfoLineChartBinding> { public class DeviceAlarmInfoLineChartActivity extends BaseActivityOaToolbarViewBinding<ActivityDeviceAlarmInfoLineChartBinding> {
private String deviceCode; private String deviceCode;
private String deviceName; private String deviceName;
//格式化日期的对象(转化成习惯的时间格式) //格式化日期的对象(转化成习惯的时间格式)
@ -93,21 +95,41 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<Ac
private ArrayList<String> xLabelListDataZqpl = new ArrayList<>(); private ArrayList<String> xLabelListDataZqpl = new ArrayList<>();
private ArrayList<String> xLabelListDataFreq = new ArrayList<>(); private ArrayList<String> xLabelListDataFreq = new ArrayList<>();
// @Override
// protected ActivityDeviceAlarmInfoLineChartBinding getBinding() {
// return ActivityDeviceAlarmInfoLineChartBinding.inflate(LayoutInflater.from(this));
// }
@NonNull
@Override @Override
protected ActivityDeviceAlarmInfoLineChartBinding getBinding() { protected ActivityDeviceAlarmInfoLineChartBinding getViewBinding() {
return ActivityDeviceAlarmInfoLineChartBinding.inflate(LayoutInflater.from(this)); return ActivityDeviceAlarmInfoLineChartBinding.inflate(LayoutInflater.from(this));
} }
@NonNull
@Override @Override
protected Toolbar getToolbar() { protected OAToolbar getToolbar() {
return binding.toolbarView.toolbarYx; return binding.toolbarView.toolbar;
} }
// @Override
// protected Toolbar getToolbar() {
// return binding.toolbarView.toolbarYx;
// }
@Override @Override
protected void initView() { protected void initView() {
this.setStatusBar(); // this.setStatusBar();
binding.toolbarView.titleYx.setText("曲线图-测振测温设备"); // binding.toolbarView.titleYx.setText("曲线图-测振测温设备");
setBack(); // setBack();
initToolbar("图表-测振测温设备", "刷新", new View.OnClickListener() {
@Override
public void onClick(View v) {
if(deviceCode!=null){
showLog(deviceCode);
getDeviceAlarmInfoLineChartData();
}
}
});
//静态方法getInstance()使用默认时区和语言环境获得一个日历。 //静态方法getInstance()使用默认时区和语言环境获得一个日历。
Calendar calendarNow = Calendar.getInstance(); Calendar calendarNow = Calendar.getInstance();
@ -315,7 +337,7 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<Ac
} }
}else{ }else{
showLog("is emply"); showLog("is emply");
setDes(); //setDes();
} }
} }
@ -341,8 +363,8 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<Ac
binding.linechart.setNoDataText("无数据"); binding.linechart.setNoDataText("无数据");
binding.linechart.setExtraBottomOffset(20f); binding.linechart.setExtraBottomOffset(20f);
binding.linechart.setExtraRightOffset(30f); binding.linechart.setExtraRightOffset(10f);
binding.linechart.setExtraLeftOffset(10f); binding.linechart.setExtraLeftOffset(20f);
// 方法一:通过设置 X 轴偏移量间接控制 // 方法一:通过设置 X 轴偏移量间接控制
// legend.setXEntrySpace(10f); // 条目之间的水平间距 // legend.setXEntrySpace(10f); // 条目之间的水平间距

@ -0,0 +1,151 @@
package com.rehome.zhdcoa.ui.activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.GridView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.rehome.zhdcoa.App;
import com.rehome.zhdcoa.R;
import com.rehome.zhdcoa.adapter.GridViewYXAdapter;
import com.rehome.zhdcoa.base.BaseActivity2;
import com.rehome.zhdcoa.bean.GridViewBean;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
public class DeviceEntryActivity extends BaseActivity2 {
private GridView gv;
// private final String[] str = {"设备报表查询", "设备预警信息", "设备在线情况", "设备总览", "设备管理"};
// private final int[] imageId = {R.drawable.icon_baobiao, R.drawable.icon_yujing,
// R.drawable.icon_device_online_status, R.drawable.icon_device_all_show,
// R.drawable.icon_device_manager};
private final String[] str = {"设备报表查询", "设备预警信息", "设备在线情况"};
private final int[] imageId = {R.drawable.icon_baobiao, R.drawable.icon_yujing,
R.drawable.icon_device_online_status};
private boolean flag = true;
@Override
public int getContentViewID() {
return R.layout.activity_device_entry;
}
protected void initView() {
gv = findViewById(R.id.gv);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
public void initData() {
//yxToolbar.setBackgroundColor(Color.parseColor("#00000000"));
this.setStatusBar();
setTitle("设备在线情况");
setBack();
List<Integer> item = new ArrayList<>();
String name = App.getInstance().getUserInfo().getManid().toUpperCase();
if (name.contains("CKCX")) {
item.add(0);
item.add(8);
item.add(9);
flag = false;
}
gv.setSelector(new ColorDrawable(Color.TRANSPARENT));
gv.setAdapter(new GridViewYXAdapter(this, getGridViewData(), item, flag));
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent;
switch (i) {
case 0:
intent = new Intent(DeviceEntryActivity.this, SbinfoActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
case 1:
intent = new Intent(DeviceEntryActivity.this, DeviceAlarmInfoActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
case 2:
intent = new Intent(DeviceEntryActivity.this, DeviceOnlineStatusActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
case 3:
// intent = new Intent(DeviceEntryActivity.this, MaterialIssue.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// startActivity(intent);
break;
case 4:
// intent = new Intent(DeviceEntryActivity.this, TlrkActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// startActivity(intent);
break;
case 5:
intent = new Intent(DeviceEntryActivity.this, JstkActivity.class);
startActivity(intent);
break;
case 6:
intent = new Intent(DeviceEntryActivity.this, ShelvesShift.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
case 7:
intent = new Intent(DeviceEntryActivity.this, WztpScActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
case 8:
intent = new Intent(DeviceEntryActivity.this, TmdyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
case 9:
intent = new Intent(DeviceEntryActivity.this, HjbqdyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
case 10:
intent = new Intent(DeviceEntryActivity.this, WztpblScActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
break;
}
}
});
}
private List<GridViewBean> getGridViewData() {
List<GridViewBean> datas = new ArrayList<>();
for (int i = 0; i < str.length; i++) {
GridViewBean bean = new GridViewBean();
bean.setTitle(str[i]);
bean.setImageid(imageId[i]);
bean.setShow(false);
datas.add(bean);
}
return datas;
}
}

@ -0,0 +1,154 @@
package com.rehome.zhdcoa.ui.activity;
import static com.rehome.zhdcoa.utils.GsonUtils.GsonToBean;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.rehome.zhdcoa.Contans;
import com.rehome.zhdcoa.R;
import com.rehome.zhdcoa.base.BaseActivityOaToolbarViewBinding;
import com.rehome.zhdcoa.bean.DeviceAlarmInfoLineChartBean;
import com.rehome.zhdcoa.bean.DeviceOnlineStatusBean;
import com.rehome.zhdcoa.databinding.ActivityDeviceOnlineStatusBinding;
import com.rehome.zhdcoa.utils.AuthenticationLoginAIUtils;
import com.rehome.zhdcoa.utils.HttpListener;
import com.rehome.zhdcoa.utils.NohttpUtils;
import com.rehome.zhdcoa.utils.OnAuthenticationLoginListener;
import com.rehome.zhdcoa.utils.RSAAndroid;
import com.rehome.zhdcoa.weiget.OAToolbar;
import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.RequestMethod;
import com.yolanda.nohttp.rest.Request;
import java.math.RoundingMode;
import java.text.DecimalFormat;
/**
* 线
*/
public class DeviceOnlineStatusActivity extends BaseActivityOaToolbarViewBinding<ActivityDeviceOnlineStatusBinding> {
@NonNull
@Override
protected ActivityDeviceOnlineStatusBinding getViewBinding() {
return ActivityDeviceOnlineStatusBinding.inflate(LayoutInflater.from(this));
}
@NonNull
@Override
protected OAToolbar getToolbar() {
return binding.toolbarView.toolbar;
}
@Override
protected void initView() {
// this.setStatusBar();
initToolbar("设备在线情况", "刷新", new View.OnClickListener() {
@Override
public void onClick(View v) {
authenticationLoginDeviceAlarmInfoRsa();
}
});
//binding.basdLl.setBackgroundColor(Color.argb(178, 0, 45, 85));
//binding.circularProgressBar.setCustomAngle(0);
//0, 45, 85, 0.7
// // 方法1使用Color类
// view.setBackgroundColor(Color.argb(128, 0, 0, 255))
//
//// 方法2使用十六进制值
// view.setBackgroundColor(0x800000FF.toInt())
//
//// 方法3解析颜色字符串
// view.setBackgroundColor(Color.parseColor("#800000FF"))
}
@Override
protected void initData() {
authenticationLoginDeviceAlarmInfoRsa();
}
private void authenticationLoginDeviceAlarmInfoRsa() {
try {
//AI三维登录接口
String userName = Contans.SP.DeviceAlermInfoAccount;
String strPublicDecode = RSAAndroid.decryptByPublicKeyForSpiltStr(
Contans.SP.DeviceAlermInfoPwd,
RSAAndroid.publicRsaKeyLocal
);
AuthenticationLoginAIUtils.authenticationDeviceAlermInfoRsaShowProgress(this,userName,strPublicDecode,new OnAuthenticationLoginListener(){
@Override
public void onAuthenticationSuccess(boolean result, String token) {
if(token!=null&&token.isEmpty()){
//登录失败
showToast("设备状态智能监测及分析平台登录失败");
}else{
//登录成功
getDeviceOnlineStatusData();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public void getDeviceOnlineStatusData() {
String url = Contans.IP + Contans.DeviceOnlineStatusUrl;
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
NohttpUtils.getInstance().add(this,0, request, new HttpListener<String>() {
@SuppressLint({"SetTextI18n", "DefaultLocale"})
@Override
public void onSucceed(int what, com.yolanda.nohttp.rest.Response<String> response) {
String result = response.get();
showLog(result);
DeviceOnlineStatusBean bean = GsonToBean(result, DeviceOnlineStatusBean.class);
if(bean!=null && bean.getCode()==20000 && bean.isSuccess() && bean.getData()!=null){
DeviceOnlineStatusBean.DeviceOnlineStatusData data = bean.getData();
int total = data.getOnlineCount()+data.getOfflineCount();
binding.tvOnline.setText(data.getOnlineCount().toString());
binding.tvOffline.setText(data.getOfflineCount().toString());
binding.tvTotal.setText(String.valueOf(total));
double progress = (data.getOnlineCount() / (double) total *100);
DecimalFormat df = new DecimalFormat("#.#");
df.setRoundingMode(RoundingMode.HALF_UP); // 设置截断模式
Double progressDouble = Double.valueOf(df.format(progress));
binding.circularProgressBar.setText(String.format("%.0f", progressDouble) + "%");
binding.circularProgressBar.setProgress((float) progress);
showLog(String.valueOf(progress));
showLog(String.valueOf(progressDouble));
//String.format("%.0f", progress)
}else{
showLog("数据加载失败");
}
}
@Override
public void onFailed(int what, com.yolanda.nohttp.rest.Response<String> response) {
}
});
}
}

@ -246,7 +246,9 @@ class LoginActivity : BaseActivityOaToolbarViewBinding<ActivityLoginBinding>() {
// binding.etUsername.setText("310249") // binding.etUsername.setText("310249")
// binding.etPassword.setText("GZgs#@0249") // binding.etPassword.setText("GZgs#@0249")
//张富荣
// binding.etUsername.setText("310272")
// binding.etPassword.setText("zh0272AS*")
//公司内网215管理员 //公司内网215管理员
// binding.etUsername.setText("ZHPS_Admin") // binding.etUsername.setText("ZHPS_Admin")

@ -50,6 +50,7 @@ import com.rehome.zhdcoa.service.PushService
import com.rehome.zhdcoa.service.UploadDataService import com.rehome.zhdcoa.service.UploadDataService
import com.rehome.zhdcoa.ui.activity.AjhxcglActivity import com.rehome.zhdcoa.ui.activity.AjhxcglActivity
import com.rehome.zhdcoa.ui.activity.DeviceAlarmInfoActivity import com.rehome.zhdcoa.ui.activity.DeviceAlarmInfoActivity
import com.rehome.zhdcoa.ui.activity.DeviceEntryActivity
import com.rehome.zhdcoa.ui.activity.GdActivity import com.rehome.zhdcoa.ui.activity.GdActivity
import com.rehome.zhdcoa.ui.activity.SbinfoActivity import com.rehome.zhdcoa.ui.activity.SbinfoActivity
import com.rehome.zhdcoa.ui.activity.SbxdjglActivity import com.rehome.zhdcoa.ui.activity.SbxdjglActivity
@ -97,8 +98,7 @@ class YunXingFragment : BaseViewBindingKotlinFragment<FragmentYunxingBinding>()
"工单录入", "工单录入",
"巡视抄表", "巡视抄表",
"定期工作", "定期工作",
"设备报表查询", "设备"
"设备预警信息",
) )
private val imageId = intArrayOf( private val imageId = intArrayOf(
R.drawable.icon8, R.drawable.icon8,
@ -109,8 +109,7 @@ class YunXingFragment : BaseViewBindingKotlinFragment<FragmentYunxingBinding>()
R.drawable.icon13, R.drawable.icon13,
R.drawable.icon6, R.drawable.icon6,
R.drawable.dingqi, R.drawable.dingqi,
R.drawable.icon_baobiao, R.drawable.icon_device_entry
R.drawable.icon_yujing
) )
/** /**
@ -168,6 +167,7 @@ class YunXingFragment : BaseViewBindingKotlinFragment<FragmentYunxingBinding>()
binding?.gvYx?.onItemClickListener = binding?.gvYx?.onItemClickListener =
AdapterView.OnItemClickListener { parent: AdapterView<*>?, view: View?, position: Int, id: Long -> AdapterView.OnItemClickListener { parent: AdapterView<*>?, view: View?, position: Int, id: Long ->
val intent: Intent val intent: Intent
//DeviceEntryActivity
when (position) { when (position) {
0 -> { 0 -> {
intent = Intent(activity, SbxdjglActivity::class.java) intent = Intent(activity, SbxdjglActivity::class.java)
@ -229,14 +229,14 @@ class YunXingFragment : BaseViewBindingKotlinFragment<FragmentYunxingBinding>()
} }
8 -> { 8 -> {
intent = Intent(activity, SbinfoActivity::class.java) intent = Intent(activity, DeviceEntryActivity::class.java)
startActivity(intent) startActivity(intent)
} }
9 -> { // 9 -> {
intent = Intent(activity, DeviceAlarmInfoActivity::class.java) // intent = Intent(activity, DeviceAlarmInfoActivity::class.java)
startActivity(intent) // startActivity(intent)
} // }
else -> {} else -> {}
} }

@ -184,6 +184,14 @@ public class HttpUtils {
httpClientBuilder.hostnameVerifier((hostname, session) -> true); // 信任所有主机名 httpClientBuilder.hostnameVerifier((hostname, session) -> true); // 信任所有主机名
} }
} }
if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
SSLSocketFactory socketFactory = getSSLSocketFactory(context);
if (socketFactory != null) {
TrustManagerFactory trustManagerFactory = getTrustManagerFactory(context);
httpClientBuilder.sslSocketFactory(socketFactory, (X509TrustManager) trustManagerFactory.getTrustManagers()[0]);
httpClientBuilder.hostnameVerifier((hostname, session) -> true); // 信任所有主机名
}
}
return httpClientBuilder.build(); return httpClientBuilder.build();
} }

@ -101,6 +101,18 @@ public class NohttpUtils {
}); });
} }
} }
if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
if (socketFactory != null) {
request.setSSLSocketFactory(socketFactory);
request.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}
}
} }
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, canCanel, isLoading, msg)); mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, canCanel, isLoading, msg));
} }
@ -137,6 +149,18 @@ public class NohttpUtils {
}); });
} }
} }
if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
if (socketFactory != null) {
request.setSSLSocketFactory(socketFactory);
request.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}
}
} }
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, canCanel, isLoading, msg)); mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, canCanel, isLoading, msg));
} }
@ -166,6 +190,18 @@ public class NohttpUtils {
}); });
} }
} }
if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
if (socketFactory != null) {
request.setSSLSocketFactory(socketFactory);
request.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}
}
} }
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, true, true, "数据加载中...")); mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, true, true, "数据加载中..."));
} }
@ -193,6 +229,18 @@ public class NohttpUtils {
}); });
} }
} }
if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
if (socketFactory != null) {
request.setSSLSocketFactory(socketFactory);
request.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}
}
} }
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, true, true, progressTitle)); mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, true, true, progressTitle));
} }
@ -220,6 +268,18 @@ public class NohttpUtils {
}); });
} }
} }
if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(context);
if (socketFactory != null) {
request.setSSLSocketFactory(socketFactory);
request.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}
}
} }
mQueue.add(what, request, new HttpResponseListenerNoProgress<T>(request, callback)); mQueue.add(what, request, new HttpResponseListenerNoProgress<T>(request, callback));
} }

@ -0,0 +1,343 @@
package com.rehome.zhdcoa.weiget;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.rehome.zhdcoa.R;
/**
*
*
* @author llw
* @since 2023/4/3
*/
public class CircularProgressBar extends View {
/**
*
*/
private int mRadius;
/**
*
*/
private int mStrokeWidth;
/**
*
*/
private int mProgressbarBgColor;
/**
*
*/
private int mProgressColor;
/**
*
*/
private int mStartAngle = 0;
/**
*
*/
private float mCurrentAngle = 0;
/**
*
*/
private int mEndAngle = 360;
/**
*
*/
private float mMaxProgress;
/**
*
*/
private float mCurrentProgress;
/**
*
*/
private String mText;
/**
*
*/
private int mTextColor;
/**
*
*/
private float mTextSize;
/**
*
*/
private boolean isGradient;
/**
*
*/
private int[] colorArray;
/**
*
*/
private long mDuration = 1000;
/**
*
*/
private boolean isAnimation = false;
/**
*
*/
private boolean isCounterClockwise = false;
public CircularProgressBar(Context context) {
this(context, null);
}
public CircularProgressBar(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public CircularProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CircularProgressBar);
mRadius = array.getDimensionPixelSize(R.styleable.CircularProgressBar_radius, 80);
mStrokeWidth = array.getDimensionPixelSize(R.styleable.CircularProgressBar_strokeWidth, 8);
mProgressbarBgColor = array.getColor(R.styleable.CircularProgressBar_progressbarBackgroundColor, ContextCompat.getColor(context, R.color.teal_700));
mProgressColor = array.getColor(R.styleable.CircularProgressBar_progressbarColor, ContextCompat.getColor(context, R.color.teal_200));
mMaxProgress = array.getInt(R.styleable.CircularProgressBar_maxProgress, 100);
mCurrentProgress = array.getInt(R.styleable.CircularProgressBar_progress, 0);
String text = array.getString(R.styleable.CircularProgressBar_text);
mText = text == null ? "" : text;
mTextColor = array.getColor(R.styleable.CircularProgressBar_textColor, ContextCompat.getColor(context, R.color.black));
mTextSize = array.getDimensionPixelSize(R.styleable.CircularProgressBar_textSize, (int) TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_SP, 14, getResources().getDisplayMetrics()));
//是否渐变
isGradient = array.getBoolean(R.styleable.CircularProgressBar_gradient, false);
//渐变颜色数组
CharSequence[] textArray = array.getTextArray(R.styleable.CircularProgressBar_gradientColorArray);
if (textArray != null) {
colorArray = new int[textArray.length];
for (int i = 0; i < textArray.length; i++) {
colorArray[i] = Color.parseColor((String) textArray[i]);
}
}
// 开始角度
mStartAngle = array.getInt(R.styleable.CircularProgressBar_customAngle, 0);
// 是否逆时针绘制
isCounterClockwise = array.getBoolean(R.styleable.CircularProgressBar_counterClockwise, false);
array.recycle();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = 0;
switch (MeasureSpec.getMode(widthMeasureSpec)) {
case MeasureSpec.UNSPECIFIED:
case MeasureSpec.AT_MOST: //wrap_content
width = mRadius * 2;
break;
case MeasureSpec.EXACTLY: //match_parent
width = MeasureSpec.getSize(widthMeasureSpec);
break;
}
//Set the measured width and height
setMeasuredDimension(width, width);
}
@Override
protected void onDraw(Canvas canvas) {
int centerX = getWidth() / 2;
RectF rectF = new RectF();
rectF.left = mStrokeWidth / 2;
rectF.top = mStrokeWidth / 2;
rectF.right = centerX * 2 - mStrokeWidth / 2;
rectF.bottom = centerX * 2 - mStrokeWidth / 2;
//绘制进度条背景
drawProgressbarBg(canvas, rectF);
//绘制进度
drawProgress(canvas, rectF);
//绘制中心文本
drawCenterText(canvas, centerX);
}
/**
*
*/
private void drawProgressbarBg(Canvas canvas, RectF rectF) {
Paint mPaint = new Paint();
//画笔的填充样式Paint.Style.STROKE 描边
mPaint.setStyle(Paint.Style.STROKE);
//圆弧的宽度
mPaint.setStrokeWidth(mStrokeWidth);
//抗锯齿
mPaint.setAntiAlias(true);
//画笔的颜色
mPaint.setColor(mProgressbarBgColor);
//画笔的样式 Paint.Cap.Round 圆形
mPaint.setStrokeCap(Paint.Cap.ROUND);
//开始画圆弧
canvas.drawArc(rectF, mStartAngle, mEndAngle, false, mPaint);
}
/**
*
*/
private void drawProgress(Canvas canvas, RectF rectF) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(mStrokeWidth);
paint.setColor(mProgressColor);
if (isGradient && colorArray != null) {
paint.setShader(new LinearGradient(0, 0, rectF.right, rectF.top, colorArray, null, Shader.TileMode.MIRROR));
}
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.ROUND);
if (!isAnimation) {
mCurrentAngle = 360 * (mCurrentProgress / mMaxProgress);
}
// 根据 isCounterClockwise 调整绘制角度
float startAngle = mStartAngle;
float sweepAngle = mCurrentAngle;
if (isCounterClockwise) {
startAngle = mStartAngle - 360;
sweepAngle = -mCurrentAngle;
}
canvas.drawArc(rectF, startAngle, sweepAngle, false, paint);
}
/**
*
*/
private void drawCenterText(Canvas canvas, int centerX) {
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(mTextColor);
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(mTextSize);
Rect textBounds = new Rect();
paint.getTextBounds(mText, 0, mText.length(), textBounds);
canvas.drawText(mText, centerX, textBounds.height() / 2 + getHeight() / 2, paint);
}
/**
*
*/
public void setProgress(float progress) {
if (progress < 0) {
throw new IllegalArgumentException("Progress value can not be less than 0");
}
if (progress > mMaxProgress) {
progress = mMaxProgress;
}
mCurrentProgress = progress;
mCurrentAngle = 360 * (mCurrentProgress / mMaxProgress);
setAnimator(mStartAngle, mCurrentAngle);
}
/**
*
*/
public void setText(String text) {
mText = text;
}
/**
*
*/
public void setTextColor(int color) {
if (color <= 0) {
throw new IllegalArgumentException("Color value can not be less than 0");
}
mTextColor = color;
}
/**
*
*/
public void setTextSize(float textSize) {
if (textSize <= 0) {
throw new IllegalArgumentException("textSize can not be less than 0");
}
mTextSize = textSize;
}
/**
*
* @param angle
*/
public void setCustomAngle(int angle) {
if (angle >= 0 && angle < 90) {
mStartAngle = 0;
} else if (angle >= 90 && angle < 180) {
mStartAngle = 90;
} else if (angle >= 180 && angle < 270) {
mStartAngle = 180;
} else if (angle >= 270 && angle < 360) {
mStartAngle = 270;
} else if (angle >= 360) {
mStartAngle = 0;
}
invalidate();
}
/**
*
*/
public void setGradient(boolean gradient) {
isGradient = gradient;
}
/**
*
* @param counterClockwise
*/
public void setCounterClockwise(boolean counterClockwise) {
isCounterClockwise = counterClockwise;
invalidate();
}
/**
*
*/
public void setColorArray(int[] colorArr) {
if (colorArr == null) return;
colorArray = colorArr;
}
/**
*
*
* @param start
* @param target
*/
private void setAnimator(float start, float target) {
isAnimation = true;
ValueAnimator animator = ValueAnimator.ofFloat(start, target);
animator.setDuration(mDuration);
animator.setTarget(mCurrentAngle);
//动画更新监听
animator.addUpdateListener(valueAnimator -> {
mCurrentAngle = (float) valueAnimator.getAnimatedValue();
invalidate();
});
animator.start();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="24dp"
android:viewportWidth="30"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M0,0h30v24H0z"
android:strokeAlpha="0.2"
android:fillAlpha="0.2"/>
<path
android:fillColor="#FF000000"
android:pathData="M29,1v22H1V1h28m1,-1H0v24h30V0z"/>
<path
android:fillColor="#FF000000"
android:pathData="M7.9,19.69a0.71,0.71 0,0 1,-0.51 -0.21,0.718 0.718,0 0,1 0,-1.03L13.82,12 7.38,5.56a0.718,0.718 0,0 1,0 -1.03c0.28,-0.29 0.75,-0.29 1.03,0l6.96,6.96c0.29,0.28 0.29,0.75 0,1.03l-6.96,6.96c-0.14,0.14 -0.33,0.21 -0.51,0.21z"/>
<path
android:fillColor="#FF000000"
android:pathData="M15.14,19.69a0.71,0.71 0,0 1,-0.51 -0.21,0.718 0.718,0 0,1 0,-1.03L21.07,12l-6.44,-6.44a0.718,0.718 0,0 1,0 -1.03c0.28,-0.29 0.75,-0.29 1.03,0l6.96,6.96c0.29,0.28 0.29,0.75 0,1.03l-6.96,6.96c-0.14,0.14 -0.33,0.21 -0.52,0.21z"/>
</vector>

@ -8,7 +8,7 @@
<include <include
android:id="@+id/toolbarView" android:id="@+id/toolbarView"
layout="@layout/toolbar_yx" /> layout="@layout/layout_base" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/background"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context=".ui.activity.DeviceEntryActivity">
<include layout="@layout/toolbar_yx"/>
<GridView
android:id="@+id/gv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/gridview_interval"
android:horizontalSpacing="@dimen/gridview_interval"
android:listSelector="@null"
android:numColumns="2"
android:scrollbars="none"
android:stretchMode="columnWidth"
android:verticalSpacing="@dimen/gridview_interval" />
</LinearLayout>

@ -0,0 +1,184 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@mipmap/background"
android:id="@+id/basd_ll"
tools:context=".ui.activity.DeviceOnlineStatusActivity">
<include
android:id="@+id/toolbarView"
layout="@layout/layout_base" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="30dp"
android:gravity="center"
android:orientation="vertical">
<!-- android:background="#B2002D55"-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="250dp">
<LinearLayout
android:layout_width="250dp"
android:layout_height="250dp"
android:gravity="center"
android:layout_gravity="center"
android:orientation="vertical">
<!--圆环进度条-->
<com.rehome.zhdcoa.weiget.CircularProgressBar
android:id="@+id/circularProgressBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:maxProgress="100"
app:progress="0"
app:progressbarBackgroundColor="@color/ring_bg"
app:progressbarColor="@color/green_dark"
app:radius="80dp"
app:strokeWidth="16dp"
app:text="0%"
app:textColor="@color/white"
app:textSize="40sp"
app:gradient="true"
app:customAngle="top"
app:counterClockwise="false"/>
</LinearLayout>
<LinearLayout
android:layout_width="250dp"
android:layout_height="250dp"
android:gravity="center"
android:layout_gravity="center"
android:orientation="vertical">
<!--圆环进度条-->
<TextView
android:id="@+id/tv_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="80dp"
android:textColor="#ffffff"
android:text="在线率"
android:textSize="20sp"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_temperature"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="#000000"
android:text="在线:"/>
<TextView
android:id="@+id/tv_online"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="#C0FF3E"
android:text="115"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="#000000"
android:text="离线:"/>
<TextView
android:id="@+id/tv_offline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="@color/red"
android:text="151"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="#000000"
android:text="总数:"/>
<TextView
android:id="@+id/tv_total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="#000000"
android:text="266"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_margin="10dp"
android:background="@color/colorPrimary"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_more"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:orientation="vertical">
<TextView
android:id="@+id/tv_more"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:textColor="@color/white"
android:gravity="center"
android:textSize="16sp"
android:text="查看更多"
app:drawableRightCompat="@drawable/icon_more_vector_asset" />
</LinearLayout>
<View
android:layout_width="5dp"
android:layout_height="match_parent"
android:visibility="gone"
android:background="#ffffff" />
<LinearLayout
android:id="@+id/ll_audit_kq"
android:layout_width="0dp"
android:layout_height="40dp"
android:visibility="gone"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:orientation="vertical">
<TextView
android:id="@+id/tv_audit_kq"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/white"
android:gravity="center"
android:textSize="16sp"
android:text="审核"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>

@ -180,7 +180,6 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="16sp" android:textSize="16sp"
android:checked="true"
android:text="aTrust" /> android:text="aTrust" />
</RadioGroup> </RadioGroup>

@ -80,5 +80,69 @@
<enum name="nonnull" value="0x06" /> <enum name="nonnull" value="0x06" />
</attr> </attr>
</declare-styleable> </declare-styleable>
<!--文字颜色-->
<attr name="textColor" format="color|reference" />
<!--文字大小-->
<attr name="textSize" format="dimension" />
<!-- 方框大小,宽高一致 -->
<attr name="boxWidth" format="dimension" />
<!-- 方框背景颜色 -->
<attr name="boxBackgroundColor" format="color|reference" />
<!-- 方框描边颜色 -->
<attr name="boxStrokeColor" format="color|reference" />
<!-- 方框描边宽度 -->
<attr name="boxStrokeWidth" format="dimension" />
<!--半径-->
<attr name="radius" format="dimension" />
<!--最大进度-->
<attr name="maxProgress" format="integer" />
<!--当前进度-->
<attr name="progress" format="integer" />
<!--进度条描边宽度-->
<attr name="strokeWidth" format="dimension" />
<!--进度条进度颜色-->
<attr name="progressbarColor" format="color|reference" />
<!--进度是否渐变-->
<attr name="gradient" format="boolean" />
<!--渐变颜色数组-->
<attr name="gradientColorArray" format="reference" />
<!--自定义开始角度 0 90180270-->
<attr name="customAngle">
<enum name="right" value="0" />
<enum name="bottom" value="90" />
<enum name="left" value="180" />
<enum name="top" value="270" />
</attr>
<!--是否逆时针方向-->
<attr name="counterClockwise" format="boolean" />
<!--圆形进度条控件-->
<declare-styleable name="CircularProgressBar">
<!--半径-->
<attr name="radius" />
<!--进度条描边宽度-->
<attr name="strokeWidth"/>
<!--进度条背景颜色-->
<attr name="progressbarBackgroundColor" format="color|reference" />
<!--进度条进度颜色-->
<attr name="progressbarColor" />
<!--最大进度-->
<attr name="maxProgress" />
<!--当前进度-->
<attr name="progress"/>
<!--文字-->
<attr name="text" format="string" />
<!--文字颜色-->
<attr name="textColor" />
<!--文字大小-->
<attr name="textSize" />
<!--进度是否渐变-->
<attr name="gradient" />
<!--渐变颜色数组-->
<attr name="gradientColorArray" />
<!--自定义开始角度 0 90180270-->
<attr name="customAngle"/>
<!--是否逆时针方向-->
<attr name="counterClockwise"/>
</declare-styleable>
</resources> </resources>

@ -79,5 +79,10 @@
<color name="lightgray">#90505050</color> <color name="lightgray">#90505050</color>
<color name="lightred">#90FF0000</color> <color name="lightred">#90FF0000</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="green_dark">#0aefcc</color>
<color name="ring_bg">#129be0</color>
</resources> </resources>

@ -94,6 +94,11 @@
<string name="str_intranet_resource">内网资源</string> <string name="str_intranet_resource">内网资源</string>
<string name="str_extranet_resource">外网资源</string> <string name="str_extranet_resource">外网资源</string>
<string name="str_proxy_domain">代理域名</string> <string name="str_proxy_domain">代理域名</string>
<string-array name="color">
<item>#00FFF7</item>
<item>#FFDD00</item>
<item>#FF0000</item>
</string-array>
</resources> </resources>

Loading…
Cancel
Save