version:1.9.9
fix: update:优化指示器颜色,优化个人中心,主页增加WiFi电池信息
This commit is contained in:
@@ -3,7 +3,6 @@ package com.uiui.zyos.activity;
|
||||
import android.content.Context;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.SoundPool;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
@@ -12,7 +11,6 @@ import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.tuo.customview.VerificationCodeView;
|
||||
@@ -21,6 +19,7 @@ import com.uiui.zyos.base.BaseDataBindingActivity;
|
||||
import com.uiui.zyos.config.CommonConfig;
|
||||
import com.uiui.zyos.databinding.ActivityExitBinding;
|
||||
import com.uiui.zyos.utils.Utils;
|
||||
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
|
||||
|
||||
public class ExitActivity extends BaseDataBindingActivity {
|
||||
private static final String TAG = "ExitActivity";
|
||||
@@ -30,10 +29,10 @@ public class ExitActivity extends BaseDataBindingActivity {
|
||||
private SoundPool soundPool;
|
||||
private int soundId;
|
||||
|
||||
@Override
|
||||
public boolean setNightMode() {
|
||||
return true;
|
||||
}
|
||||
// @Override
|
||||
// public boolean setNightMode() {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected void initDataBinding() {
|
||||
@@ -97,6 +96,9 @@ public class ExitActivity extends BaseDataBindingActivity {
|
||||
mBinding.bt7.setOnClickListener(view1 -> add(mBinding.icv, "7"));
|
||||
mBinding.bt8.setOnClickListener(view1 -> add(mBinding.icv, "8"));
|
||||
mBinding.bt9.setOnClickListener(view1 -> add(mBinding.icv, "9"));
|
||||
|
||||
// UltimateBarX.addStatusBarTopPadding(mBinding.clRoot);
|
||||
// UltimateBarX.addNavigationBarBottomPadding(mBinding.clRoot);
|
||||
}
|
||||
|
||||
private void checkPasswd() {
|
||||
|
||||
@@ -19,16 +19,17 @@ import com.uiui.zyos.R;
|
||||
import com.uiui.zyos.base.BaseDataBindingActivity;
|
||||
import com.uiui.zyos.config.CommonConfig;
|
||||
import com.uiui.zyos.databinding.ActivityPasswdBinding;
|
||||
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
|
||||
|
||||
public class PasswordActivity extends BaseDataBindingActivity {
|
||||
private static final String TAG = "PasswordActivity";
|
||||
|
||||
private ActivityPasswdBinding mBinding;
|
||||
|
||||
@Override
|
||||
public boolean setNightMode() {
|
||||
return true;
|
||||
}
|
||||
// @Override
|
||||
// public boolean setNightMode() {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected void initDataBinding() {
|
||||
@@ -108,6 +109,9 @@ public class PasswordActivity extends BaseDataBindingActivity {
|
||||
setEmpty();
|
||||
mBinding.tvHint.setText("密码错误");
|
||||
}
|
||||
|
||||
UltimateBarX.addStatusBarTopPadding(mBinding.clRoot);
|
||||
UltimateBarX.addNavigationBarBottomPadding(mBinding.clRoot);
|
||||
}
|
||||
|
||||
private void setEmpty() {
|
||||
|
||||
@@ -54,17 +54,17 @@ public class HomeworkViewModel extends BaseViewModel<ActivityHomeworkBinding, Ac
|
||||
public void onNext(@NonNull BaseResponse<ArrayList<HomeworkBean>> listBaseResponse) {
|
||||
Log.e("getHomework", "onNext: " + listBaseResponse);
|
||||
ArrayList<HomeworkBean> homeworkBeans = listBaseResponse.data;
|
||||
|
||||
if (!BuildConfig.DEBUG) {
|
||||
homeworkBeans = (ArrayList<HomeworkBean>) homeworkBeans.stream().filter(new Predicate<HomeworkBean>() {
|
||||
if (homeworkBeans != null) {
|
||||
ArrayList<HomeworkBean> homeworkBeans2 = (ArrayList<HomeworkBean>) homeworkBeans.stream().filter(new Predicate<HomeworkBean>() {
|
||||
@Override
|
||||
public boolean test(HomeworkBean homeworkBean) {
|
||||
return TimeUtils.isHomeworkToday(homeworkBean.getCreated_at());
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
mHomeworkBeanListData.setValue(homeworkBeans2);
|
||||
}else {
|
||||
mHomeworkBeanListData.setValue(homeworkBeans);
|
||||
}
|
||||
|
||||
mHomeworkBeanListData.setValue(homeworkBeans);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.uiui.zyos.activity.main;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
@@ -127,8 +128,8 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
|
||||
scaleCircleNavigator = new ScaleCircleNavigator(this);
|
||||
scaleCircleNavigator.setCircleCount(1 + mSubjectFragment.getFragmentSize());
|
||||
scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY);
|
||||
scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY);
|
||||
scaleCircleNavigator.setNormalCircleColor(getResources().getColor(R.color.normal_circle));
|
||||
scaleCircleNavigator.setSelectedCircleColor(getResources().getColor(R.color.selected_circle));
|
||||
scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() {
|
||||
@Override
|
||||
public void onClick(int index) {
|
||||
@@ -207,6 +208,23 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
} else {
|
||||
startService(intent);
|
||||
}
|
||||
|
||||
// 全屏展示
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
// 全屏显示,隐藏状态栏和导航栏,拉出状态栏和导航栏显示一会儿后消失。
|
||||
getWindow().getDecorView().setSystemUiVisibility(
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
||||
| View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
|
||||
} else {
|
||||
// 全屏显示,隐藏状态栏
|
||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -666,6 +684,8 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class BtnClick {
|
||||
public void openRobot(View view) {
|
||||
OpenApkUtils.getInstance().openAppWithoutArgs(JxwPackageConfig.JXW_VOICE_PACKAGE_NAME, JxwPackageConfig.JXW_VOICE_CLASS_NAME);
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
package com.uiui.zyos.activity.permission;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.provider.Settings;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextPaint;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
@@ -49,8 +59,24 @@ public class PermissionActivity extends BaseMvvmActivity<PermissionViewModel, Ac
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
SpannableString spannableString = new SpannableString(getResources().getString(R.string.desktop_permission));
|
||||
spannableString.setSpan(new ClickableSpan() {
|
||||
|
||||
@Override
|
||||
public void updateDrawState(TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
ds.setColor(Color.BLUE); // 设置文本颜色
|
||||
ds.setUnderlineText(false); // 设置下划线
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(@NonNull View widget) {
|
||||
Intent intent = new Intent(Settings.ACTION_SETTINGS);
|
||||
startActivity(intent);
|
||||
}
|
||||
}, 12, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
mViewDataBinding.tvNoti.setText(spannableString);
|
||||
mViewDataBinding.tvNoti.setMovementMethod(LinkMovementMethod.getInstance()); // 设置移动方法以支持点击事件
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,6 +5,10 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
@@ -161,8 +165,10 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
|
||||
setButtonVisibility();
|
||||
String avatar = mMMKV.decodeString("USERINFO_AVATAR", "");
|
||||
|
||||
Glide.with(mViewDataBinding.ivAvatar).load(avatar).error(R.drawable.default_avatar).into(mViewDataBinding.ivAvatar);
|
||||
initWifiState();
|
||||
|
||||
Glide.with(mViewDataBinding.ivAvatar).load(avatar).error(R.drawable.default_avatar).into(mViewDataBinding.ivAvatar);
|
||||
mViewDataBinding.tvTime.setText(TimeUtils.getNowTimeInMinute());
|
||||
mViewDataBinding.tvDate1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
|
||||
mViewDataBinding.tvDate2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
|
||||
mViewDataBinding.tvDate3.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
|
||||
@@ -368,6 +374,8 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
|
||||
registerRefreshReceiver();
|
||||
registerUpdateDesktopReceiver();
|
||||
registerAppChangedReceiver();
|
||||
registWiFiStatuReceiver();
|
||||
registBateeryReceiver();
|
||||
}
|
||||
|
||||
private void unregisterOwnReceiver() {
|
||||
@@ -383,6 +391,12 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
|
||||
if (mAppChangedReceiver != null) {
|
||||
mContext.unregisterReceiver(mAppChangedReceiver);
|
||||
}
|
||||
if (mWiFiStatuReceiver != null) {
|
||||
mContext.unregisterReceiver(mWiFiStatuReceiver);
|
||||
}
|
||||
if (mPowerConnectReceiver != null) {
|
||||
mContext.unregisterReceiver(mPowerConnectReceiver);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -413,6 +427,7 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
|
||||
case Intent.ACTION_TIME_CHANGED:
|
||||
case Intent.ACTION_TIMEZONE_CHANGED:
|
||||
case Intent.ACTION_TIME_TICK:
|
||||
mViewDataBinding.tvTime.setText(TimeUtils.getNowTimeInMinute());
|
||||
mViewDataBinding.tvDate1.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
|
||||
mViewDataBinding.tvDate2.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
|
||||
mViewDataBinding.tvDate3.setText(TimeUtils.getDateAndWeek(System.currentTimeMillis()));
|
||||
@@ -505,6 +520,123 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
|
||||
}
|
||||
}
|
||||
|
||||
private WiFiStatuReceiver mWiFiStatuReceiver;
|
||||
|
||||
|
||||
private void registWiFiStatuReceiver() {
|
||||
if (mWiFiStatuReceiver != null) {
|
||||
return;
|
||||
}
|
||||
mWiFiStatuReceiver = new WiFiStatuReceiver();
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(NETWORK_STATE_CHANGE);
|
||||
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
|
||||
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
|
||||
mContext.registerReceiver(mWiFiStatuReceiver, filter);
|
||||
}
|
||||
|
||||
private static final String NETWORK_STATE_CHANGE = "android.net.conn.CONNECTIVITY_CHANGE";
|
||||
|
||||
private class WiFiStatuReceiver extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent.getAction();
|
||||
Log.d("fht", "action: " + action);
|
||||
if (action.equals(NETWORK_STATE_CHANGE)) {
|
||||
boolean isNetOK = isWifiConnect();
|
||||
Log.d("fht", "网络状态发生变化,是否可用:" + isNetOK);
|
||||
if (isNetOK) {
|
||||
initWifiState();
|
||||
} else {
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.icon_wifi_disconnect));
|
||||
mViewDataBinding.tvWifiStatus.setText("未连接");
|
||||
}
|
||||
} else if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
|
||||
int wifistate = intent.getIntExtra(
|
||||
WifiManager.EXTRA_WIFI_STATE,
|
||||
WifiManager.WIFI_STATE_DISABLED);
|
||||
if (wifistate == WifiManager.WIFI_STATE_DISABLED) {
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.icon_wifi_disconnect));
|
||||
mViewDataBinding.tvWifiStatus.setText("未连接");
|
||||
} else if (wifistate == WifiManager.WIFI_STATE_ENABLED) {
|
||||
checkWifiState();
|
||||
}
|
||||
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
|
||||
initWifiState();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void initWifiState() {
|
||||
ConnectivityManager manager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo info = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
Log.d("fht", "info.isConnected(): " + info.isConnected());
|
||||
if (info.isConnected()) {
|
||||
checkWifiState();
|
||||
} else {
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.icon_wifi_disconnect));
|
||||
mViewDataBinding.tvWifiStatus.setText("未连接");
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isWifiConnect() {
|
||||
ConnectivityManager connManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo mWifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
return mWifiInfo != null && mWifiInfo.isConnected();
|
||||
}
|
||||
|
||||
public void checkWifiState() {
|
||||
if (isWifiConnect()) {
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.icon_wifi_connect));
|
||||
mViewDataBinding.tvWifiStatus.setText("已连接");
|
||||
} else {
|
||||
//无连接
|
||||
Log.d("fht", "无wifi连接");
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.icon_wifi_disconnect));
|
||||
mViewDataBinding.tvWifiStatus.setText("未连接");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 电池广播
|
||||
*/
|
||||
private void registBateeryReceiver() {
|
||||
IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
|
||||
|
||||
mContext.registerReceiver(mPowerConnectReceiver, intentFilter);
|
||||
}
|
||||
|
||||
private PowerConnectReceiver mPowerConnectReceiver = new PowerConnectReceiver();
|
||||
|
||||
class PowerConnectReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent.getAction();
|
||||
Log.e("PowerConnectReceiver", "onReceive: " + action);
|
||||
switch (action) {
|
||||
case Intent.ACTION_BATTERY_CHANGED:
|
||||
//你可以读到充电状态,如果在充电,可以读到是usb还是交流电
|
||||
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
|
||||
status == BatteryManager.BATTERY_STATUS_FULL;
|
||||
|
||||
//当前剩余电量
|
||||
int level = intent.getIntExtra("level", 0);
|
||||
//电量最大值
|
||||
int scale = intent.getIntExtra("scale", 100);
|
||||
|
||||
//电量百分比
|
||||
int batteryPer = (int) (level / (float) scale * 100);
|
||||
mViewDataBinding.batteryView.setBatteryLevel(batteryPer, isCharging);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
|
||||
public void exit(View view) {
|
||||
@@ -544,5 +676,8 @@ public class UserFragment extends BaseMvvmFragment<UserViewModel, FragmentUserBi
|
||||
mViewModel.getHomework();
|
||||
}
|
||||
|
||||
public void toWifi(View view){
|
||||
mContext.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.uiui.zyos.network.UrlAddress;
|
||||
import com.uiui.zyos.utils.ActivationUtil;
|
||||
import com.uiui.zyos.utils.ApkUtils;
|
||||
import com.uiui.zyos.utils.CXAESUtil;
|
||||
import com.uiui.zyos.utils.TimeUtils;
|
||||
import com.uiui.zyos.utils.Utils;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
@@ -217,7 +218,17 @@ public class UserViewModel extends BaseViewModel<FragmentUserBinding, FragmentEv
|
||||
public void onNext(@NonNull BaseResponse<ArrayList<HomeworkBean>> listBaseResponse) {
|
||||
Log.e("getHomework", "onNext: " + listBaseResponse);
|
||||
List<HomeworkBean> homeworkBeans = listBaseResponse.data;
|
||||
mHomeworkBeanListData.setValue(homeworkBeans);
|
||||
if (homeworkBeans != null) {
|
||||
List<HomeworkBean> homeworkBeans2 = homeworkBeans.stream().filter(new Predicate<HomeworkBean>() {
|
||||
@Override
|
||||
public boolean test(HomeworkBean homeworkBean) {
|
||||
return TimeUtils.isHomeworkToday(homeworkBean.getCreated_at());
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
mHomeworkBeanListData.setValue(homeworkBeans2);
|
||||
} else {
|
||||
mHomeworkBeanListData.setValue(homeworkBeans);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -4,12 +4,19 @@ import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.AdaptiveIconDrawable;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
|
||||
import com.uiui.zyos.R;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
||||
public class BitmapUtils {
|
||||
@@ -69,4 +76,54 @@ public class BitmapUtils {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Bitmap getbatteryIcon(Context context, Bitmap bitmap, int level, boolean charging) {
|
||||
String st_level = String.valueOf(level);
|
||||
int paddingLeft = 6;
|
||||
int paddingRight = 8;
|
||||
int paddingTop = 6;
|
||||
int paddingBottom = 6;
|
||||
int width = bitmap.getWidth();
|
||||
int height = bitmap.getHeight();
|
||||
Bitmap background = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
Bitmap bitmapScale = Bitmap.createScaledBitmap(bitmap, width, height, true);
|
||||
Canvas canvas = new Canvas();
|
||||
canvas.setBitmap(background);
|
||||
Paint paint = new Paint();
|
||||
if (charging) {
|
||||
paint.setColor(context.getColor(R.color.default_text_color));
|
||||
} else {
|
||||
if (level <= 20) {
|
||||
paint.setColor(Color.RED);
|
||||
} else {
|
||||
paint.setColor(context.getColor(R.color.default_text_color));
|
||||
}
|
||||
}
|
||||
//设置画笔类型
|
||||
paint.setStyle(Paint.Style.FILL);
|
||||
//使用画笔在画布上画矩形
|
||||
paint.setAntiAlias(true);
|
||||
Rect mSrcRect = new Rect(0, 0, width, height);
|
||||
canvas.drawBitmap(bitmapScale, mSrcRect, mSrcRect, null);
|
||||
RectF rectF = new RectF(paddingLeft, paddingTop, (bitmap.getWidth() - paddingRight) * level / 100, bitmap.getHeight() - paddingBottom);// 设置个新的长方形
|
||||
canvas.drawRoundRect(rectF, 3, 3, paint);
|
||||
|
||||
final float mDensity = context.getResources().getDisplayMetrics().density;
|
||||
Rect rect = new Rect();
|
||||
Paint mDatePaint = new Paint();
|
||||
mDatePaint.setTypeface(Typeface.SANS_SERIF);
|
||||
mDatePaint.setTextSize((int) 9F * mDensity);//文字大小
|
||||
mDatePaint.setColor(Color.BLACK);
|
||||
mDatePaint.setAntiAlias(true);
|
||||
|
||||
mDatePaint.getTextBounds(st_level, 0, st_level.length(), rect);
|
||||
//通过文字获取矩形的面积
|
||||
int width1 = rect.right - rect.left;
|
||||
int height1 = rect.bottom - rect.top;
|
||||
int width2 = background.getWidth();
|
||||
int height2 = background.getHeight();
|
||||
canvas.drawText(st_level, (width2 - width1) / 2 - rect.left, (height2 - height1) / 2 - rect.top, mDatePaint);
|
||||
return background;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -91,6 +91,12 @@ public class TimeUtils {
|
||||
return sdf.format(date);
|
||||
}
|
||||
|
||||
public static String getNowTimeInMinute() {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
||||
Date date = new Date(System.currentTimeMillis());
|
||||
return sdf.format(date);
|
||||
}
|
||||
|
||||
public static String getHomeworkNowTime() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
|
||||
226
app/src/main/java/com/uiui/zyos/view/BatteryView.java
Normal file
226
app/src/main/java/com/uiui/zyos/view/BatteryView.java
Normal file
@@ -0,0 +1,226 @@
|
||||
package com.uiui.zyos.view;
|
||||
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Typeface;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.blankj.utilcode.util.ColorUtils;
|
||||
import com.blankj.utilcode.util.ImageUtils;
|
||||
import com.uiui.zyos.R;
|
||||
import com.uiui.zyos.utils.ScreenUtils;
|
||||
|
||||
/**
|
||||
* @CreateDate:
|
||||
* @Author:lp
|
||||
* @Description:
|
||||
*/
|
||||
public class BatteryView extends View {
|
||||
|
||||
private static final float OUTLINE_THICKNESS = 3.0f;//电池框厚度
|
||||
private static final float CAP_WIDTH = 4.0f;//电池盖宽度
|
||||
private static float CAP_HEIGHT;//电池盖高度
|
||||
private static final float CAP_SPACE = 1.0f;//电池盖和电池的间隔
|
||||
private static final float CAP_CORNER_RADIUS = 4;//电池盖矩形圆角
|
||||
|
||||
private static final float GAP_OF_SHAPE_BODY = 4.0f;//电池体与外框之间的间隙
|
||||
private static final float ROUND_CORNER_RADIUS = 6;
|
||||
private static final float TEXT_SIZE = 11f;
|
||||
|
||||
private int FLASH_WIDTH;//闪电的高度和宽度
|
||||
private int FLASH_HEIGHT;
|
||||
|
||||
private float fullPowerWidth; //满电量时电池体的宽度。
|
||||
|
||||
private int mBatteryLevel = 20;
|
||||
private boolean mCharging = false;
|
||||
|
||||
private Paint batteryBodyPainter;
|
||||
private Paint batteryHeadPainter;
|
||||
private Paint mPowerPaint;//电量画笔
|
||||
private Paint backgroundPaint;//白色背景
|
||||
private Paint mTextPaint;//文字
|
||||
|
||||
private RectF outlineRect;//电池矩形
|
||||
private RectF mCapRect;//电池盖矩形
|
||||
private RectF batteryRect;//电量矩形
|
||||
private RectF backgroundRect;//背景矩形
|
||||
private Rect mTextRect;//文字
|
||||
|
||||
|
||||
private int left;
|
||||
private int top;
|
||||
|
||||
public BatteryView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public BatteryView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
//电池外框
|
||||
batteryBodyPainter = new Paint();
|
||||
batteryBodyPainter.setColor(ColorUtils.getColor(R.color.battery_box));
|
||||
batteryBodyPainter.setAntiAlias(true);
|
||||
batteryBodyPainter.setStyle(Paint.Style.STROKE);
|
||||
batteryBodyPainter.setStrokeWidth(OUTLINE_THICKNESS);
|
||||
|
||||
//电池盖
|
||||
batteryHeadPainter = new Paint();
|
||||
batteryHeadPainter.setColor(ColorUtils.getColor(R.color.battery_box));
|
||||
batteryHeadPainter.setAntiAlias(true);
|
||||
batteryHeadPainter.setStyle(Paint.Style.FILL);
|
||||
|
||||
//电量
|
||||
mPowerPaint = new Paint();
|
||||
mPowerPaint.setAntiAlias(true);
|
||||
mPowerPaint.setColor(ColorUtils.getColor(R.color.battery_normal_power));
|
||||
mPowerPaint.setStyle(Paint.Style.FILL);
|
||||
|
||||
backgroundPaint = new Paint();
|
||||
backgroundPaint.setAntiAlias(true);
|
||||
backgroundPaint.setColor(ColorUtils.getColor(R.color.battery_background));
|
||||
backgroundPaint.setStyle(Paint.Style.FILL);
|
||||
|
||||
mTextPaint = new Paint();
|
||||
mTextPaint.setTypeface(Typeface.DEFAULT_BOLD);
|
||||
mTextPaint.setTextSize(dip2px(context, TEXT_SIZE));//文字大小
|
||||
mTextPaint.setColor(ColorUtils.getColor(R.color.battery_text));
|
||||
mTextPaint.setAntiAlias(true);
|
||||
|
||||
outlineRect = new RectF();
|
||||
outlineRect.left = OUTLINE_THICKNESS;
|
||||
outlineRect.top = OUTLINE_THICKNESS;
|
||||
|
||||
mCapRect = new RectF();
|
||||
batteryRect = new RectF();
|
||||
backgroundRect = new RectF();
|
||||
mTextRect = new Rect();
|
||||
}
|
||||
|
||||
public void setBatteryLevel(int battery, boolean isChanrging) {
|
||||
this.mBatteryLevel = battery > 100 ? 100 : Math.max(battery, 1);
|
||||
// this.mBatteryLevel = battery;
|
||||
this.mCharging = isChanrging;
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public int getBatteryLevel() {
|
||||
return mBatteryLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
|
||||
*/
|
||||
public static int dip2px(Context context, float dpValue) {
|
||||
final float scale = context.getResources().getDisplayMetrics().density;
|
||||
return (int) (dpValue * scale + 0.5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
int specWidthSize = MeasureSpec.getSize(widthMeasureSpec);//宽
|
||||
int specHeightSize = MeasureSpec.getSize(heightMeasureSpec);//高
|
||||
Log.e("onMeasure", "specWidthSize: " + specWidthSize);
|
||||
Log.e("onMeasure", "specHeightSize: " + specHeightSize);
|
||||
Log.e("dip2px", "onMeasure: " + ScreenUtils.dip2px(mContext, OUTLINE_THICKNESS));
|
||||
|
||||
FLASH_HEIGHT = (int) (specHeightSize - OUTLINE_THICKNESS * 2);
|
||||
FLASH_WIDTH = FLASH_HEIGHT;
|
||||
|
||||
outlineRect.left = OUTLINE_THICKNESS + FLASH_WIDTH;
|
||||
//设置电池外框
|
||||
outlineRect.right = specWidthSize - OUTLINE_THICKNESS - CAP_SPACE - CAP_WIDTH;
|
||||
outlineRect.bottom = specHeightSize - OUTLINE_THICKNESS;
|
||||
Log.e("onMeasure", "outlineRect.right: " + outlineRect.right);
|
||||
Log.e("onMeasure", "outlineRect.bottom: " + outlineRect.bottom);
|
||||
|
||||
backgroundRect.left = outlineRect.left;
|
||||
backgroundRect.top = outlineRect.top;
|
||||
backgroundRect.bottom = outlineRect.bottom;
|
||||
backgroundRect.right = outlineRect.right;
|
||||
Log.e("onMeasure", "backgroundRect.left : " + backgroundRect.left);
|
||||
Log.e("onMeasure", "backgroundRect.top : " + backgroundRect.top);
|
||||
Log.e("onMeasure", "backgroundRect.bottom : " + backgroundRect.bottom);
|
||||
Log.e("onMeasure", "backgroundRect.right : " + backgroundRect.right);
|
||||
|
||||
//设置电池盖矩形
|
||||
CAP_HEIGHT = specHeightSize / 2;
|
||||
mCapRect.left = outlineRect.right + OUTLINE_THICKNESS + CAP_SPACE;
|
||||
mCapRect.top = (float) specHeightSize / 2 - CAP_HEIGHT / 2;
|
||||
mCapRect.right = specWidthSize;
|
||||
mCapRect.bottom = (float) specHeightSize / 2 + CAP_HEIGHT / 2;
|
||||
Log.e("onMeasure", "mCapRect.left: " + mCapRect.left);
|
||||
Log.e("onMeasure", "mCapRect.top: " + mCapRect.top);
|
||||
Log.e("onMeasure", "mCapRect.right: " + mCapRect.right);
|
||||
Log.e("onMeasure", "mCapRect.bottom: " + mCapRect.bottom);
|
||||
|
||||
|
||||
//设置电池体
|
||||
batteryRect.left = outlineRect.left + GAP_OF_SHAPE_BODY;
|
||||
batteryRect.top = outlineRect.top + GAP_OF_SHAPE_BODY;
|
||||
batteryRect.bottom = outlineRect.bottom - GAP_OF_SHAPE_BODY;
|
||||
Log.e("onMeasure", "batteryRect.left: " + batteryRect.left);
|
||||
Log.e("onMeasure", "batteryRect.top: " + batteryRect.top);
|
||||
Log.e("onMeasure", "batteryRect.bottom: " + batteryRect.bottom);
|
||||
|
||||
//闪电位置
|
||||
left = (int) (specWidthSize / 2 - OUTLINE_THICKNESS * 2);
|
||||
top = (int) (specHeightSize / 2 - OUTLINE_THICKNESS * 2);
|
||||
|
||||
fullPowerWidth = outlineRect.right - GAP_OF_SHAPE_BODY - batteryRect.left;
|
||||
setMeasuredDimension(specWidthSize, specHeightSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
|
||||
batteryRect.right = (float) mBatteryLevel / 100 * fullPowerWidth + batteryRect.left;
|
||||
Log.e("onMeasure", "batteryRect.right : " + batteryRect.right);
|
||||
|
||||
if (mCharging) {
|
||||
mPowerPaint.setColor(ColorUtils.getColor(R.color.battery_charing));
|
||||
} else {
|
||||
if (mBatteryLevel <= 20) {
|
||||
mPowerPaint.setColor(ColorUtils.getColor(R.color.battery_low_power));
|
||||
} else {
|
||||
mPowerPaint.setColor(ColorUtils.getColor(R.color.battery_normal_power));
|
||||
}
|
||||
}
|
||||
|
||||
canvas.drawRoundRect(backgroundRect, ROUND_CORNER_RADIUS, ROUND_CORNER_RADIUS, backgroundPaint);
|
||||
canvas.drawRoundRect(outlineRect, ROUND_CORNER_RADIUS, ROUND_CORNER_RADIUS, batteryBodyPainter);
|
||||
canvas.drawRoundRect(mCapRect, CAP_CORNER_RADIUS, CAP_CORNER_RADIUS, batteryHeadPainter);
|
||||
canvas.drawRoundRect(batteryRect, ROUND_CORNER_RADIUS - 1, ROUND_CORNER_RADIUS - 1, mPowerPaint);
|
||||
|
||||
String level = String.valueOf(mBatteryLevel);
|
||||
mTextPaint.getTextBounds(level, 0, level.length(), mTextRect);
|
||||
Log.e("onMeasure", "mTextRect.right : " + mTextRect.right);
|
||||
Log.e("onMeasure", "mTextRect.left : " + mTextRect.left);
|
||||
Log.e("onMeasure", "mTextRect.top : " + mTextRect.top);
|
||||
Log.e("onMeasure", "mTextRect.bottom : " + mTextRect.bottom);
|
||||
|
||||
int width1 = mTextRect.width();
|
||||
int height1 = mTextRect.height();
|
||||
Log.e("onMeasure", "width1 : " + width1);
|
||||
Log.e("onMeasure", "height1 : " + height1);
|
||||
|
||||
// canvas.drawText(level, (batteryRect.right - batteryRect.left - width1) - mTextRect.left, (batteryRect.bottom - batteryRect.top - height1) - mTextRect.top, mTextPaint);
|
||||
canvas.drawText(level, backgroundRect.left + (backgroundRect.width() - width1 - OUTLINE_THICKNESS) / 2, backgroundRect.bottom - (backgroundRect.height() - height1 + OUTLINE_THICKNESS) / 2, mTextPaint);
|
||||
|
||||
|
||||
if (mCharging) {
|
||||
Bitmap bitmap = ImageUtils.getBitmap(R.drawable.ic_battery_charging);
|
||||
Bitmap bitmapScale = Bitmap.createScaledBitmap(bitmap, FLASH_WIDTH, FLASH_HEIGHT, true);
|
||||
canvas.drawBitmap(bitmapScale, 0, (CAP_HEIGHT * 2 - FLASH_HEIGHT) / 2, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user