统计页面
This commit is contained in:
parent
15661c420e
commit
5241320e6e
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="KotlinJpsPluginSettings">
|
||||
<option name="version" value="1.6.0" />
|
||||
<option name="version" value="1.6.10" />
|
||||
</component>
|
||||
</project>
|
@ -92,7 +92,7 @@ dependencies {
|
||||
api 'me.rosuh:AndroidFilePicker:0.8.3'
|
||||
|
||||
//toast
|
||||
api 'com.github.getActivity:ToastUtils:9.5'
|
||||
api 'com.github.getActivity:Toaster:12.3'
|
||||
//图片压缩
|
||||
api "top.zibin:Luban:$rootProject.ext.lubanVersio"
|
||||
|
||||
|
@ -6,7 +6,10 @@ import android.net.NetworkInfo;
|
||||
import android.os.PowerManager;
|
||||
import android.view.Gravity;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import androidx.multidex.MultiDex;
|
||||
import androidx.multidex.MultiDexApplication;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.scwang.smart.refresh.footer.ClassicsFooter;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tenlionsoft.baselib.constant.BroadcastConstant;
|
||||
@ -15,9 +18,6 @@ import com.tenlionsoft.baselib.core.listener.ScreenListener;
|
||||
import com.tenlionsoft.baselib.core.widget.refresh.BezierCircleHeader;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
|
||||
import androidx.multidex.MultiDex;
|
||||
import androidx.multidex.MultiDexApplication;
|
||||
|
||||
/**
|
||||
* 作者: adam
|
||||
* 日期: 2021/10/29 - 9:48 上午
|
||||
@ -58,8 +58,8 @@ public class BaseAppContext extends MultiDexApplication {
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
app = this;
|
||||
ToastUtils.init(this);
|
||||
ToastUtils.setGravity(Gravity.BOTTOM, 0, 100);
|
||||
Toaster.init(this);
|
||||
Toaster.setGravity(Gravity.TOP, 0, 120);
|
||||
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
|
||||
isScreenOn = powerManager.isInteractive();
|
||||
screenTurningOff();
|
||||
|
@ -573,4 +573,8 @@ public class PathConfig {
|
||||
public static final String PATH_MODULE_COMMON_FRAGMENT_INCIDENT_STATISTICS = "/modulecommon/fragment/incidentLeaderStatistics";//事件统计
|
||||
public static final String PATH_MODULE_COMMON_FRAGMENT_POPULACE_STATISTICS = "/modulecommon/fragment/populaceLeaderStatistics";//人口统计
|
||||
public static final String PATH_MODULE_COMMON_FRAGMENT_GRID_STATISTICS = "/modulecommon/fragment/gridLeaderStatistics";//网格统计
|
||||
|
||||
public static final String ACTION_UPDATE_ERROR = "com.tenlionsoft.commandclient.update_error";
|
||||
public static final String ACTION_UPDATE_PROGRESS = "com.tenlionsoft.commandclient.update_progress";
|
||||
public static final String ACTION_UPDATE_SUCCESS = "com.tenlionsoft.commandclient.update_success";
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package com.tenlionsoft.baselib.core.beans;
|
||||
|
||||
public class BallTypeBean {
|
||||
private String typeName;
|
||||
private String typePercent;
|
||||
|
||||
public String getTypeName() {
|
||||
return typeName;
|
||||
}
|
||||
|
||||
public void setTypeName(String typeName) {
|
||||
this.typeName = typeName;
|
||||
}
|
||||
|
||||
public String getTypePercent() {
|
||||
return typePercent;
|
||||
}
|
||||
|
||||
public void setTypePercent(String typePercent) {
|
||||
this.typePercent = typePercent;
|
||||
}
|
||||
}
|
@ -4,19 +4,19 @@ import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.IBinder;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.network.HttpUtils;
|
||||
import com.tenlionsoft.baselib.core.network.response.DownloadResponseHandler;
|
||||
import com.tenlionsoft.baselib.core.network.update.utils.ApkUtils;
|
||||
import com.tenlionsoft.baselib.core.network.update.utils.Constants;
|
||||
import com.tenlionsoft.baselib.core.network.update.utils.NotificationBarUtil;
|
||||
import com.tenlionsoft.baselib.core.network.update.utils.NotificationHelper;
|
||||
import com.tenlionsoft.baselib.core.network.update.utils.StorageUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* 下载服务
|
||||
*/
|
||||
@ -48,33 +48,40 @@ public class DownloadService extends Service {
|
||||
|
||||
|
||||
private void downLoadFile() {
|
||||
HttpUtils.getInstance().download(downInfo.getUrl(), downInfo.getSavePath(), downInfo.getApkName(), new DownloadResponseHandler() {
|
||||
@Override
|
||||
public void onFinish(File download_file) {
|
||||
//收起通知栏
|
||||
NotificationBarUtil.setNotificationBarVisibility(DownloadService.this, false);
|
||||
//安装
|
||||
ApkUtils.installAPk(DownloadService.this, download_file);
|
||||
notificationHelper.cancel();
|
||||
stopSelf();
|
||||
}
|
||||
HttpUtils.getInstance()
|
||||
.download(downInfo.getUrl(), downInfo.getSavePath(), downInfo.getApkName(),
|
||||
new DownloadResponseHandler() {
|
||||
@Override
|
||||
public void onFinish(File download_file) {
|
||||
//收起通知栏
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(PathConfig.ACTION_UPDATE_SUCCESS);
|
||||
intent.putExtra("apkFile", download_file);
|
||||
sendBroadcast(intent);
|
||||
stopSelf();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProgress(long currentBytes, long totalBytes) {
|
||||
int progress = (int) ((currentBytes * 1.0 / totalBytes) * 100);
|
||||
if (progress != oldProgress) {
|
||||
notificationHelper.updateProgress(progress);
|
||||
}
|
||||
oldProgress = progress;
|
||||
}
|
||||
@Override
|
||||
public void onProgress(long currentBytes, long totalBytes) {
|
||||
int progress = (int) ((currentBytes * 1.0 / totalBytes) * 100);
|
||||
if (progress != oldProgress) {
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(PathConfig.ACTION_UPDATE_PROGRESS);
|
||||
intent.putExtra("progress", progress);
|
||||
sendBroadcast(intent);
|
||||
}
|
||||
oldProgress = progress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(String error_msg) {
|
||||
ToastUtils.show("App下载失败,请稍后重试");
|
||||
notificationHelper.cancel();
|
||||
stopSelf();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onFailure(String error_msg) {
|
||||
ToastUtils.show("App下载失败,请稍后重试");
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(PathConfig.ACTION_UPDATE_ERROR);
|
||||
sendBroadcast(intent);
|
||||
stopSelf();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -7,9 +7,9 @@ package com.tenlionsoft.baselib.core.retrofit_net;
|
||||
*/
|
||||
public class BaseUrlApi {
|
||||
|
||||
public static final String IP = "http://192.168.0.15:7011/";/* 测试IP */
|
||||
public static final String IP = "http://192.168.0.15:7011/";/* 测试IP */
|
||||
// public static final String IP = "http://10.25.242.183:80/";/* 测试IP */
|
||||
// public static final String IP = "http://www.wlcbsyzl.cn/";/* 正式IP */
|
||||
// public static final String IP = "http://www.wlcbsyzl.cn/";/* 正式IP */
|
||||
public static final String SYS_USERCENTER = "usercenter/";
|
||||
public static final String SYS_POPULATION = "populationhouse/";/*人口系统*/
|
||||
public static final String SYS_CASE = "case/";/*事件部件*/
|
||||
@ -20,12 +20,13 @@ public class BaseUrlApi {
|
||||
public static final String SYS_VISITS = "visits/";/*信访系统*/
|
||||
|
||||
public static final String BASE_MAIN_IP = IP + SYS_USERCENTER;
|
||||
// public static final String BASE_CASE_IP = IP + SYS_CASE;
|
||||
// public static final String BASE_CASE_IP = IP + SYS_CASE;
|
||||
public static final String BASE_CASE_IP = "http://192.168.0.120:9000/" + SYS_CASE;
|
||||
public static final String BASE_CASE_LOCAL_IP="http://49.233.36.36:58099/case/";
|
||||
public static final String BASE_CASE_LOCAL_IP = "http://49.233.36.36:58099/case/";
|
||||
public static final String BASE_LIBRARY_IP = IP + SYS_LIBRARY;
|
||||
public static final String BASE_TASK_IP = IP + SYS_TASK;
|
||||
public static final String BASE_PERSON_IP = IP + SYS_POPULATION;
|
||||
// public static final String BASE_PERSON_IP = IP + SYS_POPULATION;
|
||||
public static final String BASE_PERSON_IP = "http://192.168.0.115:8080/" + SYS_POPULATION;
|
||||
public static final String BASE_HOUSE_IP = IP + SYS_HOUSE;
|
||||
public static final String BASE_SECURITY_IP = IP + SYS_SECURITY;
|
||||
public static final String BASE_VISITS_IP = IP + SYS_VISITS;
|
||||
|
@ -11,12 +11,13 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.R2;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.photoview.adapter.ImageAdapter;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
|
||||
import java.io.File;
|
||||
|
@ -8,7 +8,7 @@ import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.luck.picture.lib.tools.BitmapUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.R2;
|
||||
@ -19,6 +19,7 @@ import com.tenlionsoft.baselib.core.camera.listener.JCameraListener;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.utils.ImageUtils;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
@ -43,11 +43,12 @@ import android.widget.TextView;
|
||||
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.widget.views.AfxTextView;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -0,0 +1,56 @@
|
||||
package com.tenlionsoft.baselib.core.widget.base;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.core.beans.AreaSimpleBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 作者: adam
|
||||
* 日期: 2021/10/20 - 11:18 上午
|
||||
* 邮箱: itgaojian@163.com
|
||||
* 描述:区域筛选
|
||||
*/
|
||||
public class ConditionAllAreaAdapter extends BaseRecyclerAdapter<AreaSimpleBean, ConditionHolder> {
|
||||
public List<AreaSimpleBean> mSelBeans = new ArrayList<>();
|
||||
|
||||
public ConditionAllAreaAdapter(Context ctx, List<AreaSimpleBean> list) {
|
||||
super(ctx, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConditionHolder createHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(mContext).inflate(R.layout.item_all_area_sel, parent, false);
|
||||
return new ConditionHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindHolder(ConditionHolder holder, int i) {
|
||||
AreaSimpleBean bean = mData.get(i);
|
||||
holder.mTvName.setText(bean.getName());
|
||||
holder.mCbCheck.setOnCheckedChangeListener(null);
|
||||
holder.mTvName.setTextColor(bean.isChecked() ? Color.parseColor("#1296db") : Color.BLACK);
|
||||
holder.mCbCheck.setChecked(bean.isChecked());
|
||||
holder.mCbCheck.setOnCheckedChangeListener((buttonView, isChecked) -> mLis.onItemCheckChange(bean, isChecked, i));
|
||||
if (mLis != null) {
|
||||
holder.itemView.setOnClickListener(v -> mLis.onItemCheckChange(bean, !bean.isChecked(), i));
|
||||
}
|
||||
}
|
||||
|
||||
private OnItemCheckChange mLis;
|
||||
|
||||
public void addOnitemCheckChange(OnItemCheckChange lis) {
|
||||
this.mLis = lis;
|
||||
}
|
||||
|
||||
public interface OnItemCheckChange {
|
||||
void onItemCheckChange(AreaSimpleBean bean, boolean isCheck, int pos);
|
||||
}
|
||||
}
|
@ -19,10 +19,11 @@ import android.widget.TextView;
|
||||
|
||||
import com.bigkoo.pickerview.builder.TimePickerBuilder;
|
||||
import com.bigkoo.pickerview.view.TimePickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.RegexUtils;
|
||||
import com.tenlionsoft.baselib.utils.TimeUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
|
||||
|
@ -21,9 +21,10 @@ import android.widget.CompoundButton;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.RegexUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
|
||||
|
@ -16,9 +16,10 @@ import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.RatingBar;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.RegexUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.appcompat.widget.AppCompatRatingBar;
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
|
@ -17,12 +17,13 @@ import android.widget.TextView;
|
||||
|
||||
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
|
||||
import com.bigkoo.pickerview.view.OptionsPickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.beans.AreaBean;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -0,0 +1,232 @@
|
||||
package com.tenlionsoft.baselib.core.widget.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tenlionsoft.baselib.core.beans.BallTypeBean;
|
||||
import com.tenlionsoft.baselib.utils.ConvertUtils;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.RandomColor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class BallView extends View {
|
||||
|
||||
private Random mRandom;
|
||||
|
||||
|
||||
// private int mCount = 1; // 小球个数
|
||||
private int maxRadius; // 小球最大半径
|
||||
private int minRadius; // 小球最小半径
|
||||
private int minSpeed = 1; // 小球最小移动速度
|
||||
private int maxSpeed = 1; // 小球最大移动速度
|
||||
|
||||
private int mWidth = 200;
|
||||
private int mHeight = 200;
|
||||
private List<BallTypeBean> mDatas;
|
||||
|
||||
public Ball[] mBalls; // 用来保存所有小球的数组
|
||||
|
||||
public BallView(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public BallView(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public BallView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
public BallView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
init();
|
||||
}
|
||||
|
||||
public void init() {
|
||||
// 初始化所有球(设置颜色和画笔, 初始化移动的角度)
|
||||
mRandom = new Random();
|
||||
// 圆心和半径测量的时候才设置
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
mWidth = resolveSize(mWidth, widthMeasureSpec);
|
||||
mHeight = resolveSize(mHeight, heightMeasureSpec);
|
||||
setMeasuredDimension(mWidth, mHeight);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
long startTime = System.currentTimeMillis();
|
||||
if (mDatas != null && mDatas.size() > 0) {
|
||||
// 先画出所有圆
|
||||
for (int i = 0; i < mDatas.size(); i++) {
|
||||
Ball ball = mBalls[i];
|
||||
canvas.drawCircle(ball.cx, ball.cy, ball.radius, ball.paint);
|
||||
//计算文章高度
|
||||
canvas.drawText(ball.bigTxt, ball.cx, ball.cy, ball.bigPaint);
|
||||
|
||||
Rect smallRect = new Rect();
|
||||
ball.smallPaint.getTextBounds(ball.smallTxt, 0, ball.smallTxt.length(), smallRect);
|
||||
int smallHeight = smallRect.height();
|
||||
canvas.drawText(ball.smallTxt, ball.cx, ball.cy + smallHeight + 5, ball.smallPaint);
|
||||
}
|
||||
|
||||
// 球碰撞边界
|
||||
for (int i = 0; i < mDatas.size(); i++) {
|
||||
Ball ball = mBalls[i];
|
||||
collisionDetectingAndChangeSpeed(ball); // 碰撞边界的计算
|
||||
ball.move(); // 移动
|
||||
}
|
||||
|
||||
long stopTime = System.currentTimeMillis();
|
||||
long runTime = stopTime - startTime;
|
||||
//移动动画 16毫秒执行一次
|
||||
postInvalidateDelayed(Math.abs(runTime - 16));
|
||||
} else {
|
||||
Paint emptyPaint = new Paint();
|
||||
emptyPaint.setTextAlign(Paint.Align.CENTER);
|
||||
emptyPaint.setColor(Color.parseColor("#FFA900"));
|
||||
emptyPaint.setStyle(Paint.Style.FILL);
|
||||
emptyPaint.setTextSize(ConvertUtils.sp2px(14f));
|
||||
canvas.drawText("暂无数据", canvas.getHeight() / 2, canvas.getWidth() / 2, emptyPaint);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 判断球是否碰撞碰撞边界
|
||||
public void collisionDetectingAndChangeSpeed(Ball ball) {
|
||||
int left = getLeft();
|
||||
int top = getTop();
|
||||
int right = getRight();
|
||||
int bottom = getBottom();
|
||||
|
||||
float speedX = ball.vx;
|
||||
float speedY = ball.vy;
|
||||
|
||||
// 碰撞左右,X的速度取反。 speed的判断是防止重复检测碰撞,然后黏在墙上了=。=
|
||||
if (ball.left() <= left && speedX < 0) {
|
||||
ball.vx = -ball.vx;
|
||||
} else if (ball.top() <= top && speedY < 0) {
|
||||
ball.vy = -ball.vy;
|
||||
} else if (ball.right() >= right && speedX > 0) {
|
||||
ball.vx = -ball.vx;
|
||||
} else if (ball.bottom() >= bottom && speedY > 0) {
|
||||
ball.vy = -ball.vy;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置数据
|
||||
*/
|
||||
public void setData(List<BallTypeBean> beans) {
|
||||
mDatas = beans;
|
||||
|
||||
if (mDatas == null || mDatas.size() == 0) {
|
||||
invalidate();
|
||||
} else {
|
||||
RandomColor randomColor = new RandomColor(); // 随机生成好看的颜色
|
||||
maxRadius = mWidth / mDatas.size();
|
||||
minRadius = maxRadius / 2;
|
||||
LogUtils.e("宽度:" + mWidth + "\n最大半径:" + maxRadius + "\n最小半径:" + minRadius);
|
||||
mBalls = new Ball[mDatas.size()];
|
||||
for (int i = 0; i < mDatas.size(); i++) {
|
||||
mBalls[i] = new Ball();
|
||||
// 设置画笔
|
||||
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
paint.setColor(randomColor.randomColor());
|
||||
paint.setStyle(Paint.Style.FILL);
|
||||
paint.setAlpha(180);
|
||||
paint.setStrokeWidth(0);
|
||||
//文字画笔
|
||||
Paint strPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
strPaint.setColor(Color.WHITE);
|
||||
strPaint.setStyle(Paint.Style.FILL);
|
||||
strPaint.setTextSize(ConvertUtils.sp2px(10));
|
||||
strPaint.setTextAlign(Paint.Align.CENTER);
|
||||
|
||||
Paint bigPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
bigPaint.setColor(Color.WHITE);
|
||||
bigPaint.setStyle(Paint.Style.FILL);
|
||||
bigPaint.setTextSize(ConvertUtils.sp2px(12));
|
||||
bigPaint.setTextAlign(Paint.Align.CENTER);
|
||||
// 设置速度
|
||||
float speedX = (mRandom.nextInt(maxSpeed - minSpeed + 1) + 5) / 10f;
|
||||
float speedY = (mRandom.nextInt(maxSpeed - minSpeed + 1) + 5) / 10f;
|
||||
mBalls[i].paint = paint;
|
||||
mBalls[i].smallPaint = strPaint;
|
||||
mBalls[i].bigPaint = bigPaint;
|
||||
mBalls[i].vx = mRandom.nextBoolean() ? speedX : -speedX;
|
||||
mBalls[i].vy = mRandom.nextBoolean() ? speedY : -speedY;
|
||||
mBalls[i].smallTxt = mDatas.get(i).getTypePercent();
|
||||
mBalls[i].bigTxt = mDatas.get(i).getTypeName();
|
||||
}
|
||||
|
||||
// 初始化圆的半径和圆心
|
||||
for (int i = 0; i < mBalls.length; i++) {
|
||||
//半径根据文字的长度进行缩放
|
||||
Rect txtRect = new Rect();
|
||||
mBalls[i].bigPaint.getTextBounds(mBalls[i].bigTxt, 0, mBalls[i].bigTxt.length(), txtRect);
|
||||
|
||||
// mBalls[i].radius = mRandom.nextInt(maxRadius + 1 - minRadius) + minRadius;
|
||||
mBalls[i].radius = txtRect.width() / 2 + mRandom.nextInt(15) + 20;
|
||||
mBalls[i].cx = mRandom.nextInt(mWidth - mBalls[i].radius) + mBalls[i].radius;
|
||||
mBalls[i].cy = mRandom.nextInt(mHeight - mBalls[i].radius) + mBalls[i].radius;
|
||||
}
|
||||
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Ball {
|
||||
int radius; // 半径
|
||||
float cx; // 圆心
|
||||
float cy; // 圆心
|
||||
float vx; // X轴速度
|
||||
float vy; // Y轴速度
|
||||
Paint paint;
|
||||
Paint smallPaint;
|
||||
Paint bigPaint;
|
||||
String bigTxt;
|
||||
String smallTxt;
|
||||
|
||||
// 移动
|
||||
void move() {
|
||||
//向角度的方向移动,偏移圆心
|
||||
cx += vx;
|
||||
cy += vy;
|
||||
}
|
||||
|
||||
int left() {
|
||||
return (int) (cx - radius);
|
||||
}
|
||||
|
||||
int right() {
|
||||
return (int) (cx + radius);
|
||||
}
|
||||
|
||||
int bottom() {
|
||||
return (int) (cy + radius);
|
||||
}
|
||||
|
||||
int top() {
|
||||
return (int) (cy - radius);
|
||||
}
|
||||
}
|
||||
}
|
@ -18,9 +18,10 @@ import android.view.WindowManager;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.core.beans.UserLoginBean;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UserInfoSPUtils;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
@ -17,10 +17,11 @@ import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.core.beans.AddPhotoBean;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -16,8 +16,9 @@ import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.bigkoo.pickerview.view.TimePickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
|
@ -17,13 +17,14 @@ import android.widget.TextView;
|
||||
|
||||
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
|
||||
import com.bigkoo.pickerview.view.OptionsPickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.beans.AreaBean;
|
||||
import com.tenlionsoft.baselib.core.beans.DicBean;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -17,8 +17,9 @@ import android.widget.EditText;
|
||||
import android.widget.RadioGroup;
|
||||
|
||||
import com.bigkoo.pickerview.view.TimePickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
|
@ -15,8 +15,9 @@ import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.bigkoo.pickerview.view.TimePickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
|
@ -14,8 +14,9 @@ import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,146 @@
|
||||
package com.tenlionsoft.baselib.core.widget.views;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.TouchDelegate;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.tenlionsoft.baselib.R;
|
||||
|
||||
|
||||
/**
|
||||
* 作者 : Adam on 2018/7/23.
|
||||
* 邮箱 : itgaojian@163.com
|
||||
* 描述 : 升级进度条
|
||||
*/
|
||||
public class CenterProgressUpdateView extends Dialog {
|
||||
|
||||
private View view;
|
||||
private Context context;
|
||||
private OnChoseListener mListener;
|
||||
public ImageView mIvImg;
|
||||
private String content;
|
||||
private CircleProgress mCpProgress;
|
||||
|
||||
private CenterProgressUpdateView(Context context, String content) {
|
||||
super(context, R.style.dialog_center);
|
||||
this.context = context;
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将view的点击区域放大
|
||||
*
|
||||
* @param view 需要放大的view
|
||||
* @param expandTouchWidth 放大的宽度
|
||||
*/
|
||||
public void setTouchDelegate(final View view, final int expandTouchWidth) {
|
||||
final View parentView = (View) view.getParent();
|
||||
parentView.post(() -> {
|
||||
final Rect rect = new Rect();
|
||||
view.getHitRect(rect);
|
||||
rect.top -= expandTouchWidth;
|
||||
rect.bottom += expandTouchWidth;
|
||||
rect.left -= expandTouchWidth;
|
||||
rect.right += expandTouchWidth;
|
||||
TouchDelegate touchDelegate = new TouchDelegate(rect, view);
|
||||
parentView.setTouchDelegate(touchDelegate);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
view = LayoutInflater.from(context).inflate(R.layout.dialog_center_update_progress, null);
|
||||
mCpProgress = view.findViewById(R.id.cp_progress);
|
||||
setContentView(view);
|
||||
setCancelable(false);
|
||||
setCanceledOnTouchOutside(false);
|
||||
DisplayMetrics dm = new DisplayMetrics();
|
||||
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
|
||||
windowManager.getDefaultDisplay().getMetrics(dm);
|
||||
Window window = this.getWindow();
|
||||
window.setGravity(Gravity.CENTER);
|
||||
window.setWindowAnimations(R.style.Dialog_ChoseFile);
|
||||
WindowManager.LayoutParams params = window.getAttributes();
|
||||
params.width = (int) (dm.widthPixels * 0.7);
|
||||
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
window.setAttributes(params);
|
||||
window.setBackgroundDrawable(new ColorDrawable());
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前进度
|
||||
*/
|
||||
public void setCurrentProgress(int progress) {
|
||||
if (mCpProgress != null) {
|
||||
mCpProgress.setCurrentProgress(progress);
|
||||
}
|
||||
}
|
||||
|
||||
private void showSoftKeyBoardDialog(EditText editText) {
|
||||
if (editText != null) {
|
||||
editText.setFocusable(true);
|
||||
editText.setFocusableInTouchMode(true);
|
||||
//请求获得焦点
|
||||
editText.requestFocus();
|
||||
//调用系统输入法
|
||||
InputMethodManager inputManager =
|
||||
(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
inputManager.showSoftInput(editText, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void addOnChoseListener(OnChoseListener listener) {
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择
|
||||
*
|
||||
* @param i
|
||||
*/
|
||||
private void choseType(int i) {
|
||||
if (mListener != null) {
|
||||
switch (i) {
|
||||
case 1:
|
||||
mListener.doUpdate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.dismiss();
|
||||
}
|
||||
|
||||
public interface OnChoseListener {
|
||||
void doUpdate();
|
||||
}
|
||||
|
||||
public static class DialogBuilder {
|
||||
private Context mContext;
|
||||
private String content;
|
||||
|
||||
public DialogBuilder(Context context) {
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
public CenterProgressUpdateView build() {
|
||||
return new CenterProgressUpdateView(this.mContext, this.content);
|
||||
}
|
||||
|
||||
public DialogBuilder setContent(String content) {
|
||||
this.content = content;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
@ -15,8 +15,9 @@ import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -22,12 +22,13 @@ import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
|
||||
import com.bigkoo.pickerview.builder.TimePickerBuilder;
|
||||
import com.bigkoo.pickerview.view.OptionsPickerView;
|
||||
import com.bigkoo.pickerview.view.TimePickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.beans.AreaBean;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -25,12 +25,13 @@ import android.widget.TextView;
|
||||
|
||||
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
|
||||
import com.bigkoo.pickerview.view.OptionsPickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.beans.AreaBean;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -0,0 +1,196 @@
|
||||
package com.tenlionsoft.baselib.core.widget.views;
|
||||
|
||||
|
||||
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.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ConvertUtils;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
|
||||
/**
|
||||
* 圆环图表
|
||||
*/
|
||||
public class CircleChartView extends View {
|
||||
private Paint mColorPaint;
|
||||
private Paint mGrayPaint;
|
||||
private Paint mWhitePaint;
|
||||
|
||||
private int mRadius;
|
||||
private int mHoleRadius;
|
||||
private int mWidth;
|
||||
private int mHeight;
|
||||
private int mCenterX;
|
||||
private int mCenterY;
|
||||
private Paint mCirclePaint;
|
||||
private Paint mTextPaint;
|
||||
private Bitmap mBitmap;
|
||||
private Paint mPaint;
|
||||
private int mSmallCirRadius = 25; //圆环上小圆的半径
|
||||
private int mPadding = 25;//圆环距离视图的距离
|
||||
private int mDisCircle = 35;//中心圆与圆环的间距
|
||||
private double mStartAngle = 0;//开始角度
|
||||
private double mSweepAngle = 0;//角度
|
||||
private double mSurplusAngle = 360;//
|
||||
private String mCenterStr = "0%";
|
||||
|
||||
public CircleChartView(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public CircleChartView(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public CircleChartView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
public CircleChartView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
private void init() {
|
||||
//初始化画笔
|
||||
mColorPaint = new Paint();
|
||||
mColorPaint.setColor(Color.parseColor("#FFA800"));
|
||||
mColorPaint.setStyle(Paint.Style.FILL);
|
||||
mColorPaint.setAntiAlias(true);
|
||||
|
||||
mGrayPaint = new Paint();
|
||||
mGrayPaint.setColor(Color.parseColor("#E7E7E7"));
|
||||
mGrayPaint.setStyle(Paint.Style.FILL);
|
||||
mGrayPaint.setAntiAlias(true);
|
||||
|
||||
mWhitePaint = new Paint();
|
||||
mWhitePaint.setColor(Color.WHITE);
|
||||
mWhitePaint.setStyle(Paint.Style.FILL);
|
||||
mWhitePaint.setAntiAlias(true);
|
||||
|
||||
mTextPaint = new Paint();
|
||||
mTextPaint.setColor(Color.parseColor("#FFA800"));
|
||||
mTextPaint.setStyle(Paint.Style.FILL);
|
||||
mTextPaint.setTextSize(ConvertUtils.sp2px(12));
|
||||
mTextPaint.setAntiAlias(true);
|
||||
mTextPaint.setFakeBoldText(true);//加粗
|
||||
|
||||
|
||||
mCirclePaint = new Paint();
|
||||
mCirclePaint.setColor(Color.parseColor("#E7E7E7"));
|
||||
mCirclePaint.setStyle(Paint.Style.FILL);
|
||||
mCirclePaint.setAntiAlias(true);
|
||||
mCirclePaint.setShadowLayer(3, 4, 4, Color.parseColor("#E5E5E5"));
|
||||
|
||||
mBitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.ic_statistics_count_percent_icon);
|
||||
mPaint = new Paint();
|
||||
mPaint.setColor(Color.BLACK);
|
||||
mPaint.setStyle(Paint.Style.FILL);
|
||||
mPaint.setStrokeWidth(10f);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
mWidth = resolveSize(mWidth, widthMeasureSpec);
|
||||
mHeight = resolveSize(mHeight, heightMeasureSpec);
|
||||
setMeasuredDimension(
|
||||
Math.max(getSuggestedMinimumWidth(),
|
||||
resolveSize(mWidth,
|
||||
widthMeasureSpec)),
|
||||
Math.max(getSuggestedMinimumHeight(),
|
||||
resolveSize(mHeight,
|
||||
heightMeasureSpec)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
LogUtils.e("绘制");
|
||||
mWidth = getWidth();
|
||||
mHeight = getHeight();
|
||||
//中心点
|
||||
mCenterX = mWidth / 2;
|
||||
mCenterY = mHeight / 2;
|
||||
mRadius = mWidth / 2 - mPadding;//最外圈圆
|
||||
|
||||
int left = mCenterX - mRadius;
|
||||
int top = mCenterY - mRadius;
|
||||
int right = mCenterX + mRadius;
|
||||
int bottom = mCenterY + mRadius;
|
||||
//绘制数据
|
||||
RectF oval = new RectF(left, top, right, bottom);
|
||||
canvas.drawArc(oval, (float) mStartAngle, (float) mSweepAngle, true, mColorPaint);
|
||||
//绘制剩余
|
||||
RectF rectF1 = new RectF(left, top, right, bottom);
|
||||
canvas.drawArc(rectF1, (float) mSweepAngle, (float) mSurplusAngle, true, mGrayPaint);
|
||||
|
||||
mHoleRadius = mRadius - mDisCircle;//中心圆的半径
|
||||
|
||||
double radius = mRadius - mDisCircle / 2; // 圆环的半径
|
||||
double angle = mSweepAngle; // 角度(单位为度)
|
||||
|
||||
float centerX = mCenterX; // 圆心的x坐标
|
||||
float centerY = mCenterY; // 圆心的y坐标
|
||||
|
||||
float angleInRadians = (float) Math.toRadians(angle); // 将角度转换为弧度
|
||||
double startRadian = Math.toRadians(mStartAngle);
|
||||
float x1 = Math.abs((float) (centerX + radius * Math.cos(angleInRadians))); // 第一个点的x坐标
|
||||
float y1 = Math.abs((float) (centerY + radius * Math.sin(angleInRadians))); // 第一个点的y坐标
|
||||
int startX = (int) (centerX + radius * Math.cos(startRadian));
|
||||
int startY = (int) (centerY - radius * Math.sin(startRadian));
|
||||
//绘制中心圆
|
||||
canvas.drawCircle(mCenterX, mCenterY, mHoleRadius, mWhitePaint);//绘制中心圆
|
||||
//绘制圆环上的小圆
|
||||
canvas.drawCircle(startX, startY, mSmallCirRadius, mCirclePaint);
|
||||
canvas.drawCircle(x1, y1, mSmallCirRadius, mCirclePaint);
|
||||
//绘制中心的图片
|
||||
int bitMapCenterX = mCenterX;
|
||||
int bitmapCenterY = mCenterY - 20;
|
||||
Rect dstRect = new Rect();
|
||||
int l = bitMapCenterX - 40;
|
||||
int t = bitmapCenterY - 40;
|
||||
int r = bitMapCenterX + 40;
|
||||
int b = bitmapCenterY + 40;
|
||||
dstRect.set(l, t, r, b);
|
||||
canvas.drawBitmap(mBitmap, null, dstRect, mTextPaint);
|
||||
//计算文字的宽度
|
||||
Rect textRect = new Rect();
|
||||
mTextPaint.getTextBounds(mCenterStr, 0, mCenterStr.length(), textRect);
|
||||
int textHalf = textRect.width() / 2;
|
||||
int h = textRect.height() + 25;
|
||||
canvas.drawText(mCenterStr, mCenterX - textHalf, mCenterY + h, mTextPaint);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置数据
|
||||
*/
|
||||
public void setData(double percent) {
|
||||
//计算绘制角度
|
||||
mSweepAngle = percent * 360 / 100D;
|
||||
//剩余
|
||||
mSurplusAngle = 360 - mSweepAngle;
|
||||
mCenterStr = percent + "%";
|
||||
LogUtils.e("所要绘制的角度:" + mSweepAngle + "\n剩余角度:" + mSurplusAngle);
|
||||
|
||||
//重新绘制
|
||||
invalidate();
|
||||
}
|
||||
}
|
@ -0,0 +1,506 @@
|
||||
package com.tenlionsoft.baselib.core.widget.views; /**
|
||||
* CircleProgress 2017-10-28
|
||||
* Copyright (c) 2017 KL Co.Ltd. All right reserved.
|
||||
*/
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
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.Path;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Shader;
|
||||
import android.os.Build;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ConvertUtils;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
|
||||
/**
|
||||
* 圆形进度条
|
||||
*
|
||||
* @author Adam
|
||||
* since 2023 6 23
|
||||
*/
|
||||
public class CircleProgress extends View {
|
||||
private Context mContext;
|
||||
|
||||
/**
|
||||
* 默认进度圆环渐变色值集合
|
||||
*/
|
||||
private int[] mDefColors = {Color.rgb(0, 187, 238), Color.rgb(0, 34, 255)};
|
||||
/**
|
||||
* 100%进度圆环渐变色值集合
|
||||
*/
|
||||
private int[] mEndColors = {Color.rgb(255, 196, 0), Color.rgb(255, 110, 77)};
|
||||
private int mStartColor = Color.rgb(101, 226, 175);
|
||||
private int mEndColor = Color.rgb(88, 181, 250);
|
||||
|
||||
// 圆心x坐标
|
||||
private float centerX, centerY;
|
||||
// 圆的半径
|
||||
private float radius;
|
||||
// 进度
|
||||
private float mProgress;
|
||||
// 当前进度
|
||||
private float currentProgress;
|
||||
// 圆形进度条底色画笔
|
||||
private Paint circleBgPaint;
|
||||
// 圆形进度条进度画笔
|
||||
private Paint progressPaint;
|
||||
// 进度条背景颜色
|
||||
private int circleBgColor = Color.rgb(225, 229, 232);
|
||||
// 进度条颜色
|
||||
private int progressColor = Color.RED;
|
||||
// 默认圆环的宽度
|
||||
private int defaultStrokeWidth = 10;
|
||||
// 圆形背景画笔宽度
|
||||
private int circleBgStrokeWidth = defaultStrokeWidth;
|
||||
// 圆形进度画笔宽度
|
||||
private int progressStrokeWidth = defaultStrokeWidth;
|
||||
private int lineWidth;
|
||||
private boolean isDrawCenterProgressText;
|
||||
private int centerProgressTextSize = 23;
|
||||
private int centerProgressTextColor = Color.BLACK;
|
||||
private int targetTextSize = 10;
|
||||
private int targetTextColor = Color.GRAY;
|
||||
private int targetNumSize = 20;
|
||||
private int targetNumColor = Color.BLACK;
|
||||
private int lineColor = Color.GRAY;
|
||||
|
||||
// 各种画笔
|
||||
private Paint centerProgressTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
private Paint trainPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
private Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
private Paint targetTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
// private Paint targetNumPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
|
||||
// 扇形所在矩形
|
||||
private RectF rectF = new RectF();
|
||||
// 进度动画
|
||||
private ValueAnimator progressAnimator;
|
||||
// 动画执行时间
|
||||
private int duration = 1000;
|
||||
// 动画延时启动时间
|
||||
private int startDelay = 500;
|
||||
|
||||
private ProgressListener progressListener;
|
||||
private String targetText;
|
||||
private String targetNum = "0";
|
||||
private int dp1, dp2, dp4, dp5, dp6, dp7, dp8, dp30;
|
||||
|
||||
public CircleProgress(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public CircleProgress(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
mContext = context;
|
||||
dp1 = ConvertUtils.dp2px(1);
|
||||
dp2 = ConvertUtils.dp2px(2);
|
||||
dp4 = ConvertUtils.dp2px(4);
|
||||
dp5 = ConvertUtils.dp2px(5);
|
||||
dp6 = ConvertUtils.dp2px(6);
|
||||
dp7 = ConvertUtils.dp2px(7);
|
||||
dp8 = ConvertUtils.dp2px(8);
|
||||
dp30 = ConvertUtils.dp2px(30);
|
||||
getAttr(attrs);
|
||||
initPaint();
|
||||
}
|
||||
|
||||
private void getAttr(AttributeSet attrs) {
|
||||
TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.CircleProgressBarView);
|
||||
|
||||
circleBgStrokeWidth =
|
||||
typedArray.getDimensionPixelOffset(R.styleable.CircleProgressBarView_circleBgStrokeWidth,
|
||||
defaultStrokeWidth);
|
||||
progressStrokeWidth =
|
||||
typedArray.getDimensionPixelOffset(R.styleable.CircleProgressBarView_progressStrokeWidth,
|
||||
defaultStrokeWidth);
|
||||
|
||||
circleBgColor = typedArray.getColor(R.styleable.CircleProgressBarView_circleBgColor, circleBgColor);
|
||||
progressColor = typedArray.getColor(R.styleable.CircleProgressBarView_progressColor, progressColor);
|
||||
|
||||
duration = typedArray.getColor(R.styleable.CircleProgressBarView_circleAnimationDuration, duration);
|
||||
|
||||
isDrawCenterProgressText = typedArray.getBoolean(R.styleable.CircleProgressBarView_isDrawCenterProgressText,
|
||||
false);
|
||||
|
||||
centerProgressTextColor = typedArray.getColor(R.styleable.CircleProgressBarView_centerProgressTextColor,
|
||||
mEndColor);
|
||||
centerProgressTextSize =
|
||||
typedArray.getDimensionPixelOffset(R.styleable.CircleProgressBarView_centerProgressTextSize,
|
||||
ConvertUtils.sp2px(centerProgressTextSize));
|
||||
lineWidth = typedArray.getDimensionPixelOffset(R.styleable.CircleProgressBarView_lineWidth,
|
||||
ConvertUtils.dp2px(1));
|
||||
lineColor = typedArray.getColor(R.styleable.CircleProgressBarView_lineColor, circleBgColor);
|
||||
targetNumColor = typedArray.getColor(R.styleable.CircleProgressBarView_targetNumColor, targetNumColor);
|
||||
targetNumSize = typedArray.getDimensionPixelSize(R.styleable.CircleProgressBarView_targetNumSize,
|
||||
ConvertUtils.sp2px(20));
|
||||
targetTextSize = typedArray.getDimensionPixelSize(R.styleable.CircleProgressBarView_targetTextSize,
|
||||
ConvertUtils.sp2px(12));
|
||||
targetTextColor = typedArray.getColor(R.styleable.CircleProgressBarView_targetTextColor, targetTextColor);
|
||||
targetText = typedArray.getString(R.styleable.CircleProgressBarView_target_text);
|
||||
typedArray.recycle();
|
||||
}
|
||||
|
||||
public void setCenterProgressTextColor(int color) {
|
||||
this.centerProgressTextColor = color;
|
||||
centerProgressTextPaint.setColor(color);
|
||||
}
|
||||
|
||||
private void initPaint() {
|
||||
circleBgPaint = getPaint(circleBgStrokeWidth, circleBgColor);
|
||||
|
||||
progressPaint = getPaint(progressStrokeWidth, progressColor);
|
||||
trainPaint = getPaint(ConvertUtils.dp2px(1), progressColor);
|
||||
trainPaint.setStyle(Paint.Style.FILL);
|
||||
|
||||
linePaint = getPaint(lineWidth, lineColor);
|
||||
|
||||
// 目标文本画笔配置
|
||||
targetTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
targetTextPaint.setTextSize(targetTextSize);
|
||||
targetTextPaint.setColor(targetTextColor);
|
||||
targetTextPaint.setTextAlign(Paint.Align.CENTER);
|
||||
|
||||
// 目标数字画笔配置
|
||||
// targetNumPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
// targetNumPaint.setTextSize(targetNumSize);
|
||||
// targetNumPaint.setColor(targetNumColor);
|
||||
// targetNumPaint.setTextAlign(Paint.Align.CENTER);
|
||||
|
||||
// 中间文本画笔配置
|
||||
centerProgressTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
centerProgressTextPaint.setTextSize(centerProgressTextSize);
|
||||
centerProgressTextPaint.setColor(centerProgressTextColor);
|
||||
centerProgressTextPaint.setTextAlign(Paint.Align.CENTER);
|
||||
}
|
||||
|
||||
private Paint getPaint(int strokeWidth, int color) {
|
||||
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
paint.setStrokeWidth(strokeWidth);
|
||||
paint.setColor(color);
|
||||
paint.setAntiAlias(true);
|
||||
paint.setStrokeCap(Paint.Cap.ROUND);
|
||||
paint.setStyle(Paint.Style.STROKE);
|
||||
return paint;
|
||||
}
|
||||
|
||||
private LinearGradient mShader;
|
||||
|
||||
private void configShader() {
|
||||
// Log.d("201801251336", "progress = " + mProgress);
|
||||
// int colors[] = {
|
||||
// Color.rgb(97, 212, 198), Color.rgb(100, 225, 176),
|
||||
// Color.rgb(93, 198, 221), Color.rgb(90, 187, 239)
|
||||
// };
|
||||
// float positions[] = {
|
||||
// 0.2f, 0.3f, 0.3f, 0.2f
|
||||
// };
|
||||
// 清空画笔
|
||||
progressPaint.setShader(null);
|
||||
if (mProgress >= 100) {
|
||||
mShader = new LinearGradient(centerX, 0, centerX, getHeight(),
|
||||
mEndColors, null, Shader.TileMode.CLAMP);
|
||||
} else {
|
||||
mShader = new LinearGradient(centerX, 0, centerX, getHeight(),
|
||||
mDefColors, null, Shader.TileMode.CLAMP);
|
||||
}
|
||||
|
||||
// 圆内纵向直径为着色路径,圆环的左半边和右半边的色值有点对称的感觉
|
||||
// mShader = new LinearGradient(centerX, centerY - radius, centerX, centerY + radius,
|
||||
// mColors,
|
||||
// null, Shader.TileMode.CLAMP);
|
||||
// 圆内横向直径为着色路径,可以达到首尾渐变效果,但进度不超过50%,看不出渐变后的效果
|
||||
// mShader = new LinearGradient(centerX + radius, centerY, centerX - radius, centerY,
|
||||
// mColors,
|
||||
// null, Shader.TileMode.CLAMP);
|
||||
|
||||
// mShader = new SweepGradient(centerX,centerY,mColors,new float[]{0.5f,0.5f});
|
||||
// mShader = new SweepGradient(centerX,centerY,colors,null);
|
||||
// mShader = new SweepGradient(centerX,centerY,mEndColor,mStartColor);
|
||||
// mShader = new RadialGradient(centerX,centerY,radius,mColors,null, Shader.TileMode.CLAMP);
|
||||
|
||||
progressPaint.setShader(mShader);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
if (progressAnimator != null) {
|
||||
progressAnimator.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean proAnimIsEnd = false;
|
||||
|
||||
private void initAnimation() {
|
||||
proAnimIsEnd = false;
|
||||
progressAnimator = ValueAnimator.ofFloat(0, mProgress);
|
||||
progressAnimator.setDuration(duration);
|
||||
progressAnimator.setStartDelay(startDelay);
|
||||
progressAnimator.setInterpolator(new LinearInterpolator());
|
||||
progressAnimator.addUpdateListener(valueAnimator -> {
|
||||
float value = (float) valueAnimator.getAnimatedValue();
|
||||
mProgress = value;
|
||||
currentProgress = value * 360 / 100;
|
||||
if (progressListener != null) {
|
||||
progressListener.currentProgressListener(value);
|
||||
}
|
||||
invalidate();
|
||||
});
|
||||
progressAnimator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
super.onAnimationEnd(animation);
|
||||
proAnimIsEnd = true;
|
||||
invalidate();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setTargetNum(String num) {
|
||||
targetNum = num;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSizeChanged(int w, int h, int oldW, int oldH) {
|
||||
super.onSizeChanged(w, h, oldW, oldH);
|
||||
centerX = w / 2;
|
||||
centerY = h / 2;
|
||||
|
||||
// 半径再缩小点,给小三角形空出距离
|
||||
radius = Math.min(w, h) / 2 - Math.max(circleBgStrokeWidth, progressStrokeWidth) - dp4;
|
||||
|
||||
rectF.set(centerX - radius,
|
||||
centerY - radius,
|
||||
centerX + radius,
|
||||
centerY + radius);
|
||||
trainPaint.setColor(circleBgColor);
|
||||
|
||||
configShader();
|
||||
}
|
||||
|
||||
public void setColors(int[] colors) {
|
||||
mDefColors = colors;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
// LogUtil.logD("201801251106", "centerX = " + centerX + "->centerY = "
|
||||
// + centerY + "->mProgress = " + mProgress);
|
||||
canvas.drawCircle(centerX, centerY, radius, circleBgPaint);
|
||||
canvas.drawArc(rectF, -90, currentProgress, false, progressPaint);
|
||||
if (isDrawCenterProgressText) {
|
||||
drawCenterProgressText(canvas, formatNum(mProgress) + "%");
|
||||
}
|
||||
if (proAnimIsEnd) {
|
||||
drawTriangle(canvas);
|
||||
}
|
||||
}
|
||||
|
||||
private void drawCenterProgressText(Canvas canvas, String currentProgress) {
|
||||
Paint.FontMetricsInt fontMetrics1 = centerProgressTextPaint.getFontMetricsInt();
|
||||
int baseline = (int) ((rectF.bottom + rectF.top - fontMetrics1.bottom - fontMetrics1.top) / 2);
|
||||
//文字绘制到整个布局的中心位置
|
||||
// canvas.drawLine(centerX - dp30, centerY, centerX + dp30, centerY, linePaint);
|
||||
// canvas.drawText(currentProgress, rectF.centerX(), centerY - dp5, centerProgressTextPaint);
|
||||
canvas.drawText(currentProgress, rectF.centerX(), rectF.centerY()+dp5, centerProgressTextPaint);
|
||||
|
||||
// Paint.FontMetricsInt fontMetrics2 = targetNumPaint.getFontMetricsInt();
|
||||
// int baseline2 = baseline + (fontMetrics2.bottom - fontMetrics2.top);
|
||||
// canvas.drawText("升级中...", rectF.centerX(), baseline + dp7, targetTextPaint);
|
||||
|
||||
// canvas.drawText(targetNum, rectF.centerX(), baseline2 + dp5, targetNumPaint);
|
||||
}
|
||||
|
||||
/**
|
||||
* 绘制三角形
|
||||
*
|
||||
* @param canvas
|
||||
*/
|
||||
private void drawTriangle(Canvas canvas) {
|
||||
Path path = new Path();
|
||||
PointF pf1, pf2, pf3;
|
||||
// LogUtil.logD("20190124", "绘制小三角 mProgress = " + mProgress);
|
||||
if (mProgress < 49) {
|
||||
trainPaint.setColor(circleBgColor);
|
||||
pf1 = new PointF(centerX - dp8, centerY * 2 - progressStrokeWidth - dp2);
|
||||
pf2 = new PointF(centerX - dp1, getHeight() - dp2);
|
||||
pf3 = new PointF(centerX + dp6, centerY * 2 - progressStrokeWidth - dp2);
|
||||
} else if (mProgress >= 49 && mProgress < 51) {
|
||||
float[] positions;
|
||||
int pro = (int) (mProgress * 100);
|
||||
if (mProgress >= 49 && pro < 49.2 * 100) {
|
||||
positions = new float[]{0.39f, 0.39f};
|
||||
// LogUtil.logD("20190124", "阶段1 -> pro = " + pro);
|
||||
} else if (pro >= 49.2 * 100 && pro < 49.4 * 100) {
|
||||
positions = new float[]{0.46f, 0.46f};
|
||||
// LogUtil.logD("20190124", "阶段2");
|
||||
} else if (pro >= 49.4 * 100 && pro < 49.6 * 100) {
|
||||
positions = new float[]{0.5f, 0.5f};
|
||||
// LogUtil.logD("20190124", "阶段3 -> pro = " + pro);
|
||||
} else if (pro >= 49.6 * 100 && pro < 49.8 * 100) {
|
||||
positions = new float[]{0.62f, 0.38f};
|
||||
// LogUtil.logD("20190124", "阶段4 -> pro = " + pro);
|
||||
} else if (pro >= 49.8 * 100 && pro < 50 * 100) {
|
||||
positions = new float[]{0.64f, 0.36f};
|
||||
// LogUtil.logD("20190124", "阶段5 -> pro = " + pro);
|
||||
} else if (pro >= 50 * 100 && pro < 50.2 * 100) {
|
||||
positions = new float[]{0.7f, 0.3f};
|
||||
// LogUtil.logD("20190124", "阶段6 -> pro = " + pro);
|
||||
} else if (pro >= 50.2 * 100 && pro < 50.4 * 100) {
|
||||
positions = new float[]{0.75f, 0.25f};
|
||||
// LogUtil.logD("20190124", "阶段7 -> pro = " + pro);
|
||||
} else if (pro >= 50.4 * 100 && pro < 50.6 * 100) {
|
||||
positions = new float[]{0.8f, 0.2f};
|
||||
// LogUtil.logD("20190124", "阶段8 -> pro = " + pro);
|
||||
} else if (pro >= 50.6 * 100 && pro <= 50.8 * 100) {
|
||||
positions = new float[]{0.9f, 0.1f};
|
||||
// LogUtil.logD("20190124", "阶段9 -> pro = " + pro);
|
||||
} else {
|
||||
positions = new float[]{1.0f, 0.f};
|
||||
// LogUtil.logD("20190124", "阶段 else");
|
||||
}
|
||||
LinearGradient triangleGdt = new LinearGradient(
|
||||
centerX + dp6,
|
||||
0,
|
||||
centerX - dp8,
|
||||
0,
|
||||
new int[]{Color.rgb(88, 181, 250), Color.rgb(225, 229, 232)},
|
||||
positions, Shader.TileMode.CLAMP);
|
||||
trainPaint.setShader(triangleGdt);
|
||||
pf1 = new PointF(centerX - dp8, centerY * 2 - progressStrokeWidth - dp2);
|
||||
pf2 = new PointF(centerX - dp1, getHeight() - dp2);
|
||||
pf3 = new PointF(centerX + dp6, centerY * 2 - progressStrokeWidth - dp2);
|
||||
} else {
|
||||
trainPaint.setShader(null); // 不要忘记清空着色器,不能设置的color没有效果,会优先显示shader
|
||||
if (mProgress >= 100) {
|
||||
trainPaint.setColor(mEndColors[mEndColors.length - 1]);
|
||||
} else {
|
||||
trainPaint.setColor(mDefColors[mDefColors.length - 1]);
|
||||
}
|
||||
pf1 = new PointF(centerX - dp8, centerY * 2 - progressStrokeWidth - dp2);
|
||||
pf2 = new PointF(centerX - dp1, getHeight());
|
||||
pf3 = new PointF(centerX + dp6, centerY * 2 - progressStrokeWidth - dp2);
|
||||
}
|
||||
path.moveTo(pf1.x, pf1.y);
|
||||
path.lineTo(pf2.x, pf2.y);
|
||||
path.lineTo(pf3.x, pf3.y);
|
||||
canvas.drawPath(path, trainPaint);
|
||||
path.reset();
|
||||
}
|
||||
|
||||
|
||||
public void startProgressAnimation() {
|
||||
progressAnimator.start();
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
|
||||
public void pauseProgressAnimation() {
|
||||
progressAnimator.pause();
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
|
||||
public void resumeProgressAnimation() {
|
||||
progressAnimator.resume();
|
||||
}
|
||||
|
||||
public void stopProgressAnimation() {
|
||||
progressAnimator.end();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 传入一个进度值,从0到progress动画变化
|
||||
*
|
||||
* @param progress
|
||||
* @return
|
||||
*/
|
||||
public CircleProgress setProgressWithAnimation(float progress) {
|
||||
// if (progress <= 0f || String.valueOf(progress).equals(String.valueOf(Float.NaN))) {
|
||||
if (progress <= 0f || Float.isNaN(progress)) {
|
||||
setCurrentProgress(0f, true);
|
||||
return this;
|
||||
}
|
||||
mProgress = progress;
|
||||
// if (progress >= 100) {
|
||||
// configShader();
|
||||
// }else{
|
||||
configShader();
|
||||
// }
|
||||
initAnimation();
|
||||
startProgressAnimation();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 实时进度,适用于下载进度回调时候之类的场景
|
||||
*
|
||||
* @param progress
|
||||
* @return
|
||||
*/
|
||||
public CircleProgress setCurrentProgress(float progress) {
|
||||
mProgress = progress;
|
||||
currentProgress = progress * 360 / 100;
|
||||
if (progress >= 100) {
|
||||
configShader();
|
||||
}
|
||||
invalidate();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 实时进度,适用于下载进度回调时候之类的场景
|
||||
*
|
||||
* @param progress
|
||||
* @param isArrow 是否有小箭头
|
||||
* @return
|
||||
*/
|
||||
public CircleProgress setCurrentProgress(float progress, boolean isArrow) {
|
||||
proAnimIsEnd = isArrow;
|
||||
setCurrentProgress(progress);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化数字(保留两位小数)
|
||||
*
|
||||
* @param money
|
||||
* @return
|
||||
*/
|
||||
public static String formatNum(float money) {
|
||||
if (((int) money * 100) == (int) (money * 100)) {
|
||||
//如果是一个整数
|
||||
return String.valueOf((int) money);
|
||||
}
|
||||
DecimalFormat format = new DecimalFormat("0.00");
|
||||
return format.format(money);
|
||||
}
|
||||
|
||||
public interface ProgressListener {
|
||||
void currentProgressListener(float currentProgress);
|
||||
}
|
||||
|
||||
public CircleProgress setProgressListener(ProgressListener listener) {
|
||||
progressListener = listener;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,290 @@
|
||||
package com.tenlionsoft.baselib.core.widget.views;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.text.TextUtils;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.core.beans.AreaSimpleBean;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
|
||||
import com.tenlionsoft.baselib.core.widget.base.ConditionAllAreaAdapter;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||||
import razerdp.basepopup.BasePopupWindow;
|
||||
|
||||
/**
|
||||
* 作者: adam
|
||||
* 日期: 2021/9/30 - 2:58 下午
|
||||
* 邮箱: itgaojian@163.com
|
||||
* 描述: 地区选择
|
||||
*/
|
||||
public class ConditionAllAreaPopup extends BasePopupWindow {
|
||||
private final TextView mTvCurrentArea;
|
||||
private final RecyclerView mRlvArea1;
|
||||
private final RecyclerView mRlvArea2;
|
||||
private final RecyclerView mRlvArea3;
|
||||
private final Context mCtx;
|
||||
private final ConditionAllAreaAdapter mAreaAdapter1;
|
||||
private final ConditionAllAreaAdapter mAreaAdapter2;
|
||||
private final ConditionAllAreaAdapter mAreaAdapter3;
|
||||
private final TextView mTvConfirm;
|
||||
private List<AreaSimpleBean> mAreaList1;
|
||||
private List<AreaSimpleBean> mAreaList2;
|
||||
private List<AreaSimpleBean> mAreaList3;
|
||||
private AreaSimpleBean mSelArea1;//旗县区
|
||||
private AreaSimpleBean mSelArea2;//乡镇街道
|
||||
private AreaSimpleBean mSelArea3;//村、社区
|
||||
private String mCurrentAreaStr;
|
||||
private String mAreaCode0;
|
||||
private int mUserLevel = -1;
|
||||
private OnListPopupItemClickListener mOnListPopupItemClickListener;
|
||||
|
||||
public ConditionAllAreaPopup(Context context, String currentArea, int userLevel) {
|
||||
super(context);
|
||||
mCtx = context;
|
||||
View view = createPopupById(R.layout.popup_all_area_layout);
|
||||
mCurrentAreaStr = currentArea;
|
||||
mUserLevel = userLevel;
|
||||
mTvCurrentArea = view.findViewById(R.id.tv_current_area);
|
||||
mTvCurrentArea.setText(mCurrentAreaStr);
|
||||
mRlvArea1 = view.findViewById(R.id.rlv_area_1);
|
||||
mRlvArea2 = view.findViewById(R.id.rlv_area_2);
|
||||
mRlvArea3 = view.findViewById(R.id.rlv_area_3);
|
||||
mTvConfirm = view.findViewById(R.id.tv_confirm);
|
||||
mTvConfirm.setOnClickListener(v -> doConfirm());
|
||||
mAreaList1 = new ArrayList<>();
|
||||
mAreaList2 = new ArrayList<>();
|
||||
mAreaList3 = new ArrayList<>();
|
||||
mAreaAdapter1 = new ConditionAllAreaAdapter(mCtx, mAreaList1);
|
||||
mAreaAdapter2 = new ConditionAllAreaAdapter(mCtx, mAreaList2);
|
||||
mAreaAdapter3 = new ConditionAllAreaAdapter(mCtx, mAreaList3);
|
||||
|
||||
mRlvArea1.setLayoutManager(new LinearLayoutManager(mCtx));
|
||||
mRlvArea2.setLayoutManager(new LinearLayoutManager(mCtx));
|
||||
mRlvArea3.setLayoutManager(new LinearLayoutManager(mCtx));
|
||||
|
||||
mRlvArea1.setAdapter(mAreaAdapter1);
|
||||
mRlvArea2.setAdapter(mAreaAdapter2);
|
||||
mRlvArea3.setAdapter(mAreaAdapter3);
|
||||
|
||||
mAreaAdapter1.addOnitemCheckChange((bean, isCheck, pos) -> {
|
||||
if (mAreaAdapter1.mSelBeans.size() > 0) {
|
||||
if (bean.getId().equals(mAreaAdapter1.mSelBeans.get(0).getId())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
mAreaAdapter1.mSelBeans.clear();
|
||||
mAreaAdapter1.mSelBeans.add(bean);
|
||||
for (int i = 0; i < mAreaAdapter1.getData().size(); i++) {
|
||||
mAreaAdapter1.getData().get(i).setChecked(false);
|
||||
}
|
||||
bean.setChecked(true);
|
||||
mSelArea1 = bean;
|
||||
mSelArea2 = null;
|
||||
mSelArea3 = null;
|
||||
mAreaAdapter1.notifyDataSetChanged();
|
||||
mAreaList2.clear();
|
||||
mAreaAdapter2.setData(mAreaList2);
|
||||
mAreaList3.clear();
|
||||
mAreaAdapter3.setData(mAreaList3);
|
||||
//获取下一级
|
||||
setAreaNames("");
|
||||
getAreaList(bean.getId(), 2);
|
||||
});
|
||||
mAreaAdapter2.addOnitemCheckChange((bean, isCheck, pos) -> {
|
||||
if (mAreaAdapter2.mSelBeans.size() > 0) {
|
||||
if (bean.getId().equals(mAreaAdapter2.mSelBeans.get(0).getId())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
mAreaAdapter2.mSelBeans.clear();
|
||||
mAreaAdapter2.mSelBeans.add(bean);
|
||||
for (int i = 0; i < mAreaAdapter2.getData().size(); i++) {
|
||||
mAreaAdapter2.getData().get(i).setChecked(false);
|
||||
}
|
||||
bean.setChecked(true);
|
||||
mSelArea2 = bean;
|
||||
mSelArea3 = null;
|
||||
mAreaAdapter2.notifyDataSetChanged();
|
||||
mAreaList3.clear();
|
||||
mAreaAdapter3.setData(mAreaList3);
|
||||
//获取下一级
|
||||
setAreaNames("");
|
||||
getAreaList(bean.getId(), 3);
|
||||
});
|
||||
mAreaAdapter3.addOnitemCheckChange((bean, isCheck, pos) -> {
|
||||
mAreaAdapter3.mSelBeans.clear();
|
||||
mAreaAdapter3.mSelBeans.add(bean);
|
||||
for (int i = 0; i < mAreaAdapter3.getData().size(); i++) {
|
||||
mAreaAdapter3.getData().get(i).setChecked(false);
|
||||
}
|
||||
bean.setChecked(true);
|
||||
mSelArea3 = bean;
|
||||
setAreaNames(bean.getName());
|
||||
mAreaAdapter3.notifyDataSetChanged();
|
||||
});
|
||||
switch (mUserLevel) {
|
||||
case 1://市
|
||||
mAreaCode0 = UserLgUtils.getUserAreaCode();
|
||||
getAreaList(mAreaCode0, 1);
|
||||
break;
|
||||
case 2://旗县区
|
||||
mRlvArea1.setVisibility(View.GONE);
|
||||
mSelArea1 = new AreaSimpleBean();
|
||||
mSelArea1.setId(UserLgUtils.getUserAreaCode());
|
||||
mRlvArea2.setVisibility(View.VISIBLE);
|
||||
mRlvArea3.setVisibility(View.VISIBLE);
|
||||
getAreaList(mSelArea1.getId(), 2);
|
||||
break;
|
||||
case 3://乡镇街道
|
||||
mRlvArea1.setVisibility(View.GONE);
|
||||
mRlvArea2.setVisibility(View.GONE);
|
||||
mSelArea2 = new AreaSimpleBean();
|
||||
mSelArea2.setId(UserLgUtils.getUserAreaCode());
|
||||
mRlvArea3.setVisibility(View.VISIBLE);
|
||||
getAreaList(mSelArea2.getId(), 3);
|
||||
break;
|
||||
case 4://村社区
|
||||
mSelArea3 = new AreaSimpleBean();
|
||||
mSelArea3.setId(UserLgUtils.getUserAreaCode());
|
||||
mRlvArea1.setVisibility(View.GONE);
|
||||
mRlvArea2.setVisibility(View.GONE);
|
||||
mRlvArea3.setVisibility(View.GONE);
|
||||
// getAreaList(mSelArea2.getId(), 3);
|
||||
break;
|
||||
}
|
||||
setContentView(view);
|
||||
setBackgroundColor(Color.parseColor("#11000000"));
|
||||
setPopupGravity(Gravity.CENTER | Gravity.BOTTOM);
|
||||
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
|
||||
int height = (int) (displayMetrics.heightPixels * 0.3);
|
||||
setHeight(height);
|
||||
setWidth(displayMetrics.widthPixels);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前选择的区域
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
private void setAreaNames(String name) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (mSelArea1 != null) {
|
||||
sb.append("/");
|
||||
sb.append(mSelArea1.getName());
|
||||
}
|
||||
if (mSelArea2 != null) {
|
||||
sb.append("/");
|
||||
sb.append(mSelArea2.getName());
|
||||
}
|
||||
if (mSelArea3 != null) {
|
||||
sb.append("/");
|
||||
sb.append(name);
|
||||
}
|
||||
mTvCurrentArea.setText(UserLgUtils.getUserFullAreaName() + sb);
|
||||
}
|
||||
|
||||
private void getAreaList(String id, int type) {
|
||||
ProgressDialog dialog = UIUtil.initDialog(mCtx, "获取中...");
|
||||
dialog.show();
|
||||
RetrofitManager.getInstance()
|
||||
.create(BaseApiService.class)
|
||||
.getAreaListByCode(id, UserLgUtils.getToken())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<List<AreaSimpleBean>>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(List<AreaSimpleBean> areaListBeans) {
|
||||
dialog.dismiss();
|
||||
if (null != areaListBeans && areaListBeans.size() > 0) {
|
||||
switch (type) {
|
||||
case 1: //area1
|
||||
mAreaList1 = areaListBeans;
|
||||
mAreaAdapter1.setData(mAreaList1);
|
||||
break;
|
||||
case 2://area2
|
||||
mAreaList2 = areaListBeans;
|
||||
mAreaAdapter2.setData(mAreaList2);
|
||||
break;
|
||||
case 3://area3
|
||||
mAreaList3 = areaListBeans;
|
||||
mAreaAdapter3.setData(mAreaList3);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
ToastUtils.show("暂无区域数据");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
dialog.dismiss();
|
||||
ExceptionHandler.handleException(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定选择
|
||||
*/
|
||||
private void doConfirm() {
|
||||
String areaCode = "";
|
||||
if (mSelArea1 != null) {
|
||||
areaCode = mSelArea1.getId();
|
||||
}
|
||||
if (mSelArea2 != null) {
|
||||
areaCode = mSelArea2.getId();
|
||||
}
|
||||
if (mSelArea3 != null) {
|
||||
areaCode = mSelArea3.getId();
|
||||
}
|
||||
if (mOnListPopupItemClickListener != null) {
|
||||
String areaName = mTvCurrentArea.getText().toString().trim();
|
||||
if (TextUtils.isEmpty(areaCode)) {
|
||||
areaCode = mAreaCode0;
|
||||
}
|
||||
mOnListPopupItemClickListener.onItemClick(areaName, areaCode);
|
||||
}
|
||||
}
|
||||
|
||||
public OnListPopupItemClickListener getOnListPopupItemClickListener() {
|
||||
return mOnListPopupItemClickListener;
|
||||
}
|
||||
|
||||
public void setOnListPopupItemClickListener(OnListPopupItemClickListener onListPopupItemClickListener) {
|
||||
mOnListPopupItemClickListener = onListPopupItemClickListener;
|
||||
}
|
||||
|
||||
public interface OnListPopupItemClickListener {
|
||||
void onItemClick(String areaNames, String areaCode);
|
||||
}
|
||||
}
|
@ -15,8 +15,9 @@ import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.appcompat.widget.AppCompatRatingBar;
|
||||
|
||||
|
@ -15,8 +15,9 @@ import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.appcompat.widget.AppCompatRatingBar;
|
||||
|
||||
|
@ -7,9 +7,10 @@ import android.util.AttributeSet;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
@ -0,0 +1,106 @@
|
||||
package com.tenlionsoft.baselib.core.widget.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.BlurMaskFilter;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Typeface;
|
||||
import android.view.View;
|
||||
|
||||
public class Pie3DView extends View {
|
||||
|
||||
private int[] data; //数据
|
||||
private String[] info; //信息
|
||||
private float[] percent; //比例
|
||||
private float depth; //深度
|
||||
private int[] colors = //颜色
|
||||
new int[]{Color.RED, Color.YELLOW, Color.BLUE, Color.GREEN, Color.CYAN};
|
||||
private Paint mainPaint; //轮廓画笔
|
||||
private int ScrHeight; //屏幕高度
|
||||
private int ScrWidth; //屏幕宽度
|
||||
private Paint arrPaint; //填充画笔
|
||||
private Paint textPaint = null; //文本画笔
|
||||
|
||||
//构造函数
|
||||
public Pie3DView(Context context, int[] data, String[] info) {
|
||||
super(context);
|
||||
|
||||
this.data = data;
|
||||
this.info = info;
|
||||
initData();
|
||||
initPaint();
|
||||
}
|
||||
|
||||
//初始化画笔
|
||||
private void initPaint() {
|
||||
mainPaint = new Paint();
|
||||
mainPaint.setAntiAlias(true);
|
||||
mainPaint.setColor(Color.WHITE);
|
||||
mainPaint.setStyle(Paint.Style.STROKE);
|
||||
mainPaint.setStrokeWidth(3);
|
||||
|
||||
arrPaint = new Paint();
|
||||
arrPaint.setStyle(Paint.Style.FILL);
|
||||
BlurMaskFilter PaintBGBlur = new BlurMaskFilter(
|
||||
2, BlurMaskFilter.Blur.SOLID);
|
||||
arrPaint.setMaskFilter(PaintBGBlur);
|
||||
|
||||
textPaint = new Paint();
|
||||
textPaint.setColor(Color.BLUE);
|
||||
textPaint.setTextSize(16);
|
||||
textPaint.setTypeface(Typeface.DEFAULT_BOLD);
|
||||
}
|
||||
|
||||
//数据转化比例
|
||||
private void initData() {
|
||||
int sum = 0;
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
sum += data[i];
|
||||
}
|
||||
percent = new float[data.length];
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
percent[i] = (float) data[i] / sum * 360;
|
||||
}
|
||||
}
|
||||
|
||||
//绘图
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
|
||||
ScrHeight = getHeight();
|
||||
ScrWidth = getWidth();
|
||||
|
||||
float cirX = ScrWidth / 2;
|
||||
float cirY = ScrHeight / 3;
|
||||
float radius = ScrHeight / 4;
|
||||
depth = radius / 5;
|
||||
|
||||
final float p = 0.5f;
|
||||
float arcLeft = cirX - radius;
|
||||
float arcTop = cirY - radius * p;
|
||||
float arcRight = cirX + radius;
|
||||
float arcBottom = cirY + radius * p;
|
||||
RectF arcRF0;
|
||||
for (int j = (int) depth; j >= 0; j--) {
|
||||
arcRF0 = new RectF(arcLeft, arcTop + j, arcRight, arcBottom + j);
|
||||
float CurrPer = -20;
|
||||
for (int i = 0; i < percent.length; i++) {
|
||||
arrPaint.setColor(colors[i]);
|
||||
canvas.drawArc(arcRF0, CurrPer, percent[i], true, arrPaint);
|
||||
if (j == 1 && CurrPer > 0 && CurrPer < 180)
|
||||
canvas.drawLine(cirX + (float) Math.cos(CurrPer / 180 * Math.PI) * radius,
|
||||
cirY + (float) Math.sin(CurrPer / 180 * Math.PI) * radius * p,
|
||||
cirX + (float) Math.cos(CurrPer / 180 * Math.PI) * radius,
|
||||
cirY + (float) Math.sin(CurrPer / 180 * Math.PI) * radius * p + 1f + depth,
|
||||
mainPaint);
|
||||
if (j == 0 || j == depth)
|
||||
canvas.drawArc(arcRF0, CurrPer, percent[i], true, mainPaint);
|
||||
CurrPer += percent[i];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -20,7 +20,7 @@ import android.widget.TextView;
|
||||
|
||||
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
|
||||
import com.bigkoo.pickerview.view.OptionsPickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.R;
|
||||
import com.tenlionsoft.baselib.core.beans.DictionaryBean;
|
||||
import com.tenlionsoft.baselib.core.beans.PersonSearchBean;
|
||||
@ -29,6 +29,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.RegexUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -0,0 +1,50 @@
|
||||
package com.tenlionsoft.baselib.utils;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ColorInfo {
|
||||
Range hueRange;
|
||||
Range saturationRange;
|
||||
Range brightnessRange;
|
||||
List<Range> lowerBounds;
|
||||
|
||||
public ColorInfo(Range hueRange, Range saturationRange, Range brightnessRange, List<Range> lowerBounds) {
|
||||
this.hueRange = hueRange;
|
||||
this.saturationRange = saturationRange;
|
||||
this.brightnessRange = brightnessRange;
|
||||
this.lowerBounds = lowerBounds;
|
||||
}
|
||||
|
||||
public Range getHueRange() {
|
||||
return hueRange;
|
||||
}
|
||||
|
||||
public void setHueRange(Range hueRange) {
|
||||
this.hueRange = hueRange;
|
||||
}
|
||||
|
||||
public Range getSaturationRange() {
|
||||
return saturationRange;
|
||||
}
|
||||
|
||||
public void setSaturationRange(Range saturationRange) {
|
||||
this.saturationRange = saturationRange;
|
||||
}
|
||||
|
||||
public Range getBrightnessRange() {
|
||||
return brightnessRange;
|
||||
}
|
||||
|
||||
public void setBrightnessRange(Range brightnessRange) {
|
||||
this.brightnessRange = brightnessRange;
|
||||
}
|
||||
|
||||
public List<Range> getLowerBounds() {
|
||||
return lowerBounds;
|
||||
}
|
||||
|
||||
public void setLowerBounds(List<Range> lowerBounds) {
|
||||
this.lowerBounds = lowerBounds;
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@ import android.view.TextureView;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.core.beans.ErrorBean;
|
||||
|
||||
import java.net.SocketTimeoutException;
|
||||
|
@ -0,0 +1,421 @@
|
||||
package com.tenlionsoft.baselib.utils;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class RandomColor {
|
||||
private static final String TAG = "RandomColor";
|
||||
private Random random;
|
||||
|
||||
public static enum SaturationType {
|
||||
RANDOM, MONOCHROME
|
||||
}
|
||||
|
||||
public static enum Luminosity {
|
||||
BRIGHT, LIGHT, DARK, RANDOM
|
||||
}
|
||||
|
||||
public static class Options {
|
||||
int hue;
|
||||
SaturationType saturationType;
|
||||
Luminosity luminosity;
|
||||
|
||||
public int getHue() {
|
||||
return hue;
|
||||
}
|
||||
|
||||
public void setHue(int hue) {
|
||||
this.hue = hue;
|
||||
}
|
||||
|
||||
public SaturationType getSaturationType() {
|
||||
return saturationType;
|
||||
}
|
||||
|
||||
public void setSaturationType(SaturationType saturationType) {
|
||||
this.saturationType = saturationType;
|
||||
}
|
||||
|
||||
public Luminosity getLuminosity() {
|
||||
return luminosity;
|
||||
}
|
||||
|
||||
public void setLuminosity(Luminosity luminosity) {
|
||||
this.luminosity = luminosity;
|
||||
}
|
||||
}
|
||||
|
||||
private HashMap<String, ColorInfo> colors = new HashMap<>();
|
||||
|
||||
public RandomColor() {
|
||||
loadColorBounds();
|
||||
random = new Random();
|
||||
}
|
||||
|
||||
public RandomColor(long seed){
|
||||
loadColorBounds();
|
||||
random = new Random();
|
||||
random.setSeed(seed);
|
||||
}
|
||||
|
||||
private int getColor(int hue, int saturation, int brightness) {
|
||||
return android.graphics.Color.HSVToColor(new float[] {hue, saturation, brightness});
|
||||
}
|
||||
|
||||
public int randomColor() {
|
||||
return randomColor(0, null, null);
|
||||
}
|
||||
|
||||
public int randomColor(int value, SaturationType saturationType, Luminosity luminosity) {
|
||||
int hue = value;
|
||||
hue = pickHue(hue);
|
||||
int saturation = pickSaturation(hue, saturationType, luminosity);
|
||||
int brightness = pickBrightness(hue, saturation, luminosity);
|
||||
|
||||
int color = getColor(hue, saturation, brightness);
|
||||
return color;
|
||||
}
|
||||
|
||||
public int[] randomColor(int count) {
|
||||
if (count <= 0) {
|
||||
throw new IllegalArgumentException("count must be greater than 0");
|
||||
}
|
||||
|
||||
int[] colors = new int[count];
|
||||
for (int i = 0; i < count; i++) {
|
||||
colors[i] = randomColor();
|
||||
}
|
||||
|
||||
return colors;
|
||||
}
|
||||
|
||||
public int randomColor(Color color) {
|
||||
int hue = pickHue(color.name());
|
||||
int saturation = pickSaturation(color, null, null);
|
||||
int brightness = pickBrightness(color, saturation, null);
|
||||
|
||||
int colorValue = getColor(hue, saturation, brightness);
|
||||
return colorValue;
|
||||
}
|
||||
|
||||
public int[] random(Color color, int count) {
|
||||
if (count <= 0) {
|
||||
throw new IllegalArgumentException("count must be greater than 0");
|
||||
}
|
||||
|
||||
int[] colors = new int[count];
|
||||
for (int i = 0; i < count; i++) {
|
||||
colors[i] = randomColor(color);
|
||||
}
|
||||
|
||||
return colors;
|
||||
}
|
||||
|
||||
private int pickHue(int hue) {
|
||||
Range hueRange = getHueRange(hue);
|
||||
return doPickHue(hueRange);
|
||||
}
|
||||
|
||||
private int doPickHue(Range hueRange) {
|
||||
int hue = randomWithin(hueRange);
|
||||
|
||||
// Instead of storing red as two seperate ranges,
|
||||
// we group them, using negative numbers
|
||||
if (hue < 0) {
|
||||
hue = 360 + hue;
|
||||
}
|
||||
|
||||
return hue;
|
||||
}
|
||||
|
||||
private int pickHue(String name) {
|
||||
Range hueRange = getHueRange(name);
|
||||
return doPickHue(hueRange);
|
||||
}
|
||||
|
||||
private Range getHueRange(int number) {
|
||||
if (number < 360 && number > 0) {
|
||||
return new Range(number, number);
|
||||
}
|
||||
|
||||
return new Range(0, 360);
|
||||
}
|
||||
|
||||
private Range getHueRange(String name) {
|
||||
if (colors.containsKey(name)) {
|
||||
return colors.get(name).getHueRange();
|
||||
}
|
||||
|
||||
return new Range(0, 360);
|
||||
}
|
||||
|
||||
private int pickSaturation(int hue, SaturationType saturationType, Luminosity luminosity) {
|
||||
return pickSaturation(getColorInfo(hue), saturationType, luminosity);
|
||||
}
|
||||
|
||||
private int pickSaturation(Color color, SaturationType saturationType, Luminosity luminosity) {
|
||||
ColorInfo colorInfo = colors.get(color.name());
|
||||
return pickSaturation(colorInfo, saturationType, luminosity);
|
||||
}
|
||||
|
||||
private int pickSaturation(ColorInfo colorInfo, SaturationType saturationType, Luminosity luminosity) {
|
||||
if (saturationType != null) {
|
||||
switch (saturationType) {
|
||||
case RANDOM:
|
||||
return randomWithin(new Range(0, 100));
|
||||
case MONOCHROME:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (colorInfo == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Range saturationRange = colorInfo.getSaturationRange();
|
||||
|
||||
int min = saturationRange.start;
|
||||
int max = saturationRange.end;
|
||||
|
||||
if (luminosity != null) {
|
||||
switch (luminosity) {
|
||||
case LIGHT:
|
||||
min = 55;
|
||||
break;
|
||||
case BRIGHT:
|
||||
min = max - 10;
|
||||
break;
|
||||
case DARK:
|
||||
max = 55;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return randomWithin(new Range(min, max));
|
||||
}
|
||||
|
||||
private int pickBrightness(int hue, int saturation, Luminosity luminosity) {
|
||||
ColorInfo colorInfo = getColorInfo(hue);
|
||||
|
||||
return pickBrightness(colorInfo, saturation, luminosity);
|
||||
}
|
||||
|
||||
private int pickBrightness(Color color, int saturation, Luminosity luminosity) {
|
||||
ColorInfo colorInfo = colors.get(color.name());
|
||||
|
||||
return pickBrightness(colorInfo, saturation, luminosity);
|
||||
}
|
||||
|
||||
private int pickBrightness(ColorInfo colorInfo, int saturation, Luminosity luminosity) {
|
||||
int min = getMinimumBrightness(colorInfo, saturation),
|
||||
max = 100;
|
||||
|
||||
if (luminosity != null) {
|
||||
switch (luminosity) {
|
||||
|
||||
case DARK:
|
||||
max = min + 20;
|
||||
break;
|
||||
|
||||
case LIGHT:
|
||||
min = (max + min) / 2;
|
||||
break;
|
||||
|
||||
case RANDOM:
|
||||
min = 0;
|
||||
max = 100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return randomWithin(new Range(min, max));
|
||||
}
|
||||
|
||||
private int getMinimumBrightness(ColorInfo colorInfo, int saturation) {
|
||||
if (colorInfo == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
List<Range> lowerBounds = colorInfo.getLowerBounds();
|
||||
for (int i = 0; i < lowerBounds.size() - 1; i++) {
|
||||
|
||||
int s1 = lowerBounds.get(i).start,
|
||||
v1 = lowerBounds.get(i).end;
|
||||
|
||||
if (i == lowerBounds.size() - 1) {
|
||||
break;
|
||||
}
|
||||
int s2 = lowerBounds.get(i + 1).start,
|
||||
v2 = lowerBounds.get(i + 1).end;
|
||||
|
||||
if (saturation >= s1 && saturation <= s2) {
|
||||
|
||||
float m = (v2 - v1)/(float) (s2 - s1),
|
||||
b = v1 - m*s1;
|
||||
|
||||
return (int) (m*saturation + b);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private ColorInfo getColorInfo(int hue) {
|
||||
// Maps red colors to make picking hue easier
|
||||
if (hue >= 334 && hue <= 360) {
|
||||
hue-= 360;
|
||||
}
|
||||
|
||||
for(String key : colors.keySet()) {
|
||||
ColorInfo colorInfo = colors.get(key);
|
||||
if (colorInfo.getHueRange() != null && colorInfo.getHueRange().contain(hue)) {
|
||||
return colorInfo;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private int randomWithin (Range range) {
|
||||
return (int) Math.floor(range.start + random.nextDouble()*(range.end + 1 - range.start));
|
||||
}
|
||||
|
||||
public void defineColor(String name, Range hueRange, List<Range> lowerBounds) {
|
||||
int sMin = lowerBounds.get(0).start;
|
||||
int sMax = lowerBounds.get(lowerBounds.size() - 1).start;
|
||||
int bMin = lowerBounds.get(lowerBounds.size() - 1).end;
|
||||
int bMax = lowerBounds.get(0).end;
|
||||
|
||||
colors.put(name, new ColorInfo(hueRange, new Range(sMin, sMax), new Range(bMin, bMax), lowerBounds));
|
||||
}
|
||||
|
||||
private void loadColorBounds() {
|
||||
List<Range> lowerBounds1 = new ArrayList<>();
|
||||
lowerBounds1.add(new Range(0, 0));
|
||||
lowerBounds1.add(new Range(100, 0));
|
||||
defineColor(
|
||||
Color.MONOCHROME.name(),
|
||||
null,
|
||||
lowerBounds1
|
||||
);
|
||||
|
||||
List<Range> lowerBounds2 = new ArrayList<>();
|
||||
lowerBounds2.add(new Range(20, 100));
|
||||
lowerBounds2.add(new Range(30, 92));
|
||||
lowerBounds2.add(new Range(40, 89));
|
||||
lowerBounds2.add(new Range(50, 85));
|
||||
lowerBounds2.add(new Range(60, 78));
|
||||
lowerBounds2.add(new Range(70, 70));
|
||||
lowerBounds2.add(new Range(80, 60));
|
||||
lowerBounds2.add(new Range(90, 55));
|
||||
lowerBounds2.add(new Range(100, 50));
|
||||
defineColor(
|
||||
Color.RED.name(),
|
||||
new Range(-26, 18),
|
||||
lowerBounds2
|
||||
);
|
||||
|
||||
List<Range> lowerBounds3 = new ArrayList<Range>();
|
||||
lowerBounds3.add(new Range(20, 100));
|
||||
lowerBounds3.add(new Range(30, 93));
|
||||
lowerBounds3.add(new Range(40, 88));
|
||||
lowerBounds3.add(new Range(50, 86));
|
||||
lowerBounds3.add(new Range(60, 85));
|
||||
lowerBounds3.add(new Range(70, 70));
|
||||
lowerBounds3.add(new Range(100, 70));
|
||||
defineColor(
|
||||
Color.ORANGE.name(),
|
||||
new Range(19, 46),
|
||||
lowerBounds3
|
||||
);
|
||||
|
||||
List<Range> lowerBounds4 = new ArrayList<>();
|
||||
lowerBounds4.add(new Range(25, 100));
|
||||
lowerBounds4.add(new Range(40, 94));
|
||||
lowerBounds4.add(new Range(50, 89));
|
||||
lowerBounds4.add(new Range(60, 86));
|
||||
lowerBounds4.add(new Range(70, 84));
|
||||
lowerBounds4.add(new Range(80, 82));
|
||||
lowerBounds4.add(new Range(90, 80));
|
||||
lowerBounds4.add(new Range(100, 75));
|
||||
|
||||
defineColor(
|
||||
Color.YELLOW.name(),
|
||||
new Range(47, 62),
|
||||
lowerBounds4
|
||||
);
|
||||
|
||||
List<Range> lowerBounds5 = new ArrayList<>();
|
||||
lowerBounds5.add(new Range(30, 100));
|
||||
lowerBounds5.add(new Range(40, 90));
|
||||
lowerBounds5.add(new Range(50, 85));
|
||||
lowerBounds5.add(new Range(60, 81));
|
||||
lowerBounds5.add(new Range(70, 74));
|
||||
lowerBounds5.add(new Range(80, 64));
|
||||
lowerBounds5.add(new Range(90, 50));
|
||||
lowerBounds5.add(new Range(100, 40));
|
||||
|
||||
defineColor(
|
||||
Color.GREEN.name(),
|
||||
new Range(63,178),
|
||||
lowerBounds5
|
||||
);
|
||||
|
||||
List<Range> lowerBounds6 = new ArrayList<>();
|
||||
lowerBounds6.add(new Range(20, 100));
|
||||
lowerBounds6.add(new Range(30, 86));
|
||||
lowerBounds6.add(new Range(40, 80));
|
||||
lowerBounds6.add(new Range(50, 74));
|
||||
lowerBounds6.add(new Range(60, 60));
|
||||
lowerBounds6.add(new Range(70, 52));
|
||||
lowerBounds6.add(new Range(80, 44));
|
||||
lowerBounds6.add(new Range(90, 39));
|
||||
lowerBounds6.add(new Range(100, 35));
|
||||
|
||||
defineColor(
|
||||
Color.BLUE.name(),
|
||||
new Range(179, 257),
|
||||
lowerBounds6
|
||||
);
|
||||
|
||||
List<Range> lowerBounds7 = new ArrayList<>();
|
||||
lowerBounds7.add(new Range(20, 100));
|
||||
lowerBounds7.add(new Range(30, 87));
|
||||
lowerBounds7.add(new Range(40, 79));
|
||||
lowerBounds7.add(new Range(50, 70));
|
||||
lowerBounds7.add(new Range(60, 65));
|
||||
lowerBounds7.add(new Range(70, 59));
|
||||
lowerBounds7.add(new Range(80, 52));
|
||||
lowerBounds7.add(new Range(90, 45));
|
||||
lowerBounds7.add(new Range(100, 42));
|
||||
|
||||
defineColor(
|
||||
Color.PURPLE.name(),
|
||||
new Range(258, 282),
|
||||
lowerBounds7
|
||||
);
|
||||
|
||||
List<Range> lowerBounds8 = new ArrayList<>();
|
||||
lowerBounds8.add(new Range(20, 100));
|
||||
lowerBounds8.add(new Range(30, 90));
|
||||
lowerBounds8.add(new Range(40, 86));
|
||||
lowerBounds8.add(new Range(60, 84));
|
||||
lowerBounds8.add(new Range(80, 80));
|
||||
lowerBounds8.add(new Range(90, 75));
|
||||
lowerBounds8.add(new Range(100, 73));
|
||||
|
||||
defineColor(
|
||||
Color.PINK.name(),
|
||||
new Range(283, 334),
|
||||
lowerBounds8
|
||||
);
|
||||
}
|
||||
|
||||
public static enum Color {
|
||||
MONOCHROME, RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE, PINK
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.tenlionsoft.baselib.utils;
|
||||
|
||||
public class Range {
|
||||
int start;
|
||||
int end;
|
||||
|
||||
public Range(int start, int end) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public boolean contain(int value) {
|
||||
return value >= start && value <= end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "start: " + start + " end: " + end;
|
||||
}
|
||||
}
|
@ -117,6 +117,11 @@ public final class TimeUtils {
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
return format.format(date);
|
||||
}
|
||||
public static String getCurrentTimeHHMM(){
|
||||
Date date = new Date();
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
||||
return format.format(date);
|
||||
}
|
||||
|
||||
public static String getCurrentDate() {
|
||||
Date date = new Date();
|
||||
|
@ -0,0 +1,18 @@
|
||||
package com.tenlionsoft.baselib.utils;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
public class ToastUtils {
|
||||
public static void show(String content) {
|
||||
Toaster.show(content);
|
||||
}
|
||||
|
||||
public static void show(int content) {
|
||||
Toaster.show(content);
|
||||
}
|
||||
|
||||
public static void showLong(String content) {
|
||||
Toaster.showLong(content);
|
||||
}
|
||||
}
|
BIN
baselib/src/main/res/drawable-xhdpi/ic_rb_normal_icon.png
Normal file
BIN
baselib/src/main/res/drawable-xhdpi/ic_rb_normal_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 673 B |
BIN
baselib/src/main/res/drawable-xhdpi/ic_rb_sel_point.png
Normal file
BIN
baselib/src/main/res/drawable-xhdpi/ic_rb_sel_point.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 853 B |
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
5
baselib/src/main/res/drawable/sel_radio_item_hook.xml
Normal file
5
baselib/src/main/res/drawable/sel_radio_item_hook.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/ic_rb_sel_point" android:state_checked="true" />
|
||||
<item android:drawable="@drawable/ic_rb_normal_icon" android:state_checked="false" />
|
||||
</selector>
|
9
baselib/src/main/res/drawable/shp_rectangle_shade_white_blue.xml
Executable file
9
baselib/src/main/res/drawable/shp_rectangle_shade_white_blue.xml
Executable file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:centerColor="#ff154cff"
|
||||
android:endColor="#f2f2f2"
|
||||
android:startColor="#f2f2f2"
|
||||
android:type="linear" />
|
||||
</shape>
|
8
baselib/src/main/res/drawable/shp_rectangle_top_left_bottom.xml
Executable file
8
baselib/src/main/res/drawable/shp_rectangle_top_left_bottom.xml
Executable file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/purple" />
|
||||
<corners
|
||||
android:bottomRightRadius="20dp"
|
||||
android:topLeftRadius="5dp" />
|
||||
</shape>
|
6
baselib/src/main/res/drawable/shp_rectangle_yellow_shallow.xml
Executable file
6
baselib/src/main/res/drawable/shp_rectangle_yellow_shallow.xml
Executable file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#FEF4EC" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
43
baselib/src/main/res/layout/dialog_center_update_progress.xml
Executable file
43
baselib/src/main/res/layout/dialog_center_update_progress.xml
Executable file
@ -0,0 +1,43 @@
|
||||
<?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="wrap_content"
|
||||
android:background="@color/transparent"
|
||||
android:orientation="vertical"
|
||||
tools:background="@color/black"
|
||||
tools:layout_margin="20dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/shape_rectangle_white_rim"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<com.tenlionsoft.baselib.core.widget.views.CircleProgress
|
||||
android:id="@+id/cp_progress"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="120dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="20dp"
|
||||
app:centerProgressTextColor="#FF6953"
|
||||
app:centerProgressTextSize="20dp"
|
||||
app:circleBgStrokeWidth="5dp"
|
||||
app:isDrawCenterProgressText="true"
|
||||
app:progressStrokeWidth="8dp"
|
||||
app:targetTextColor="#999999"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:padding="10dp"
|
||||
android:text="软件正在升级中..."
|
||||
android:textColor="@color/black"
|
||||
android:textSize="@dimen/text_14" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
38
baselib/src/main/res/layout/item_all_area_sel.xml
Normal file
38
baselib/src/main/res/layout/item_all_area_sel.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="2dp"
|
||||
android:background="@color/white"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:padding="3dp">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/cb_check"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="2dp"
|
||||
android:button="@drawable/sel_radio_item_hook"
|
||||
tools:checked="false" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="3dp"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="@dimen/text_14"
|
||||
tools:text="测试" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
90
baselib/src/main/res/layout/popup_all_area_layout.xml
Normal file
90
baselib/src/main/res/layout/popup_all_area_layout.xml
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="5dp"
|
||||
android:background="@drawable/shp_rectangle_white"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="3dp"
|
||||
android:orientation="horizontal"
|
||||
android:padding="3dp">
|
||||
|
||||
<com.tenlionsoft.baselib.core.widget.views.TypeBoldTextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="当前区域 :"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="@dimen/text_14" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_current_area"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="3dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical"
|
||||
android:minLines="2"
|
||||
android:textColor="@color/text_blue"
|
||||
android:textSize="@dimen/text_14"
|
||||
tools:text="乌兰察布市/集宁区/XXXX/XXXX/XXXX" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_confirm"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="8dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:gravity="right"
|
||||
android:padding="5dp"
|
||||
android:text="确定"
|
||||
android:textColor="@color/col_blace_red" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rlv_area_1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:padding="5dp"
|
||||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/gray"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rlv_area_2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:padding="5dp"
|
||||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/gray"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rlv_area_3"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:padding="5dp"
|
||||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/gray"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
@ -194,4 +194,37 @@
|
||||
<attr name="NavigationPaddingTop" format="dimension" />
|
||||
<attr name="NavigationPaddingBottom" format="dimension" />
|
||||
</declare-styleable>
|
||||
<declare-styleable name="CircleProgressBarView">
|
||||
|
||||
<attr name="circleBgStrokeWidth" format="dimension" />
|
||||
<attr name="progressStrokeWidth" format="dimension" />
|
||||
|
||||
<attr name="circleBgColor" format="color" />
|
||||
<attr name="progressColor" format="color" />
|
||||
|
||||
<attr name="circleAnimationDuration" format="integer" />
|
||||
|
||||
<attr name="isDrawCenterProgressText" format="boolean" />
|
||||
|
||||
<attr name="centerProgressTextColor" format="color" />
|
||||
<attr name="centerProgressTextSize" format="dimension" />
|
||||
<attr name="targetNumColor" format="color" />
|
||||
<attr name="targetNumSize" format="dimension" />
|
||||
<attr name="targetTextColor" format="color" />
|
||||
<attr name="targetTextSize" format="integer" />
|
||||
<attr name="lineWidth" format="integer" />
|
||||
<attr name="lineColor" format="color" />
|
||||
<attr name="target_text" format="string" />
|
||||
|
||||
<attr name="round_color" format="color" />
|
||||
<attr name="round_progress_color" format="color" />
|
||||
<attr name="round_width" format="dimension" />
|
||||
<attr name="max_" format="integer" />
|
||||
<attr name="text_isDisplayable" format="boolean" />
|
||||
<attr name="style_">
|
||||
<enum name="STROKE" value="0" />
|
||||
<enum name="FILL" value="1" />
|
||||
</attr>
|
||||
|
||||
</declare-styleable>
|
||||
</resources>
|
@ -60,6 +60,7 @@
|
||||
<color name="colorRedBg">#fa5148</color>
|
||||
<!-- 白色 -->
|
||||
<color name="white">#ffffffff</color>
|
||||
<color name="purple">#9C8EC6</color>
|
||||
<color name="white_8">#31EAE7E7</color>
|
||||
<color name="white_5">#80ffffff</color>
|
||||
<color name="white_1">#F2F0F0</color>
|
||||
|
@ -8,6 +8,7 @@
|
||||
<dimen name="text_22">22dp</dimen>
|
||||
<dimen name="text_14">14dp</dimen>
|
||||
<dimen name="text_12">12dp</dimen>
|
||||
<dimen name="text_10">10dp</dimen>
|
||||
<dimen name="text_15">15dp</dimen>
|
||||
<dimen name="text_16">16dp</dimen>
|
||||
<dimen name="material_bottom_navigation_active_item_max_width">168dp</dimen>
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.6.0'
|
||||
ext.kotlin_version = '1.4.0-rc'
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
@ -13,7 +13,7 @@ buildscript {
|
||||
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
|
||||
classpath "com.alibaba:arouter-register:1.0.2"
|
||||
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.6'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.github.promeg.pinyinhelper.Pinyin;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tengshisoft.chatmodule.R2;
|
||||
import com.tengshisoft.chatmodule.fragments.OftenContactFragment;
|
||||
@ -31,6 +31,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseViewPage2Adapter;
|
||||
import com.tenlionsoft.baselib.core.widget.base.ViewPageNavigatorAdapter;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -11,7 +11,7 @@ import android.widget.ProgressBar;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tengshisoft.chatmodule.R2;
|
||||
@ -23,6 +23,7 @@ import com.tenlionsoft.baselib.core.db.UserDao;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.core.widget.views.TypeFaceTextView;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -18,7 +18,7 @@ import android.widget.TextView;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkCallInfo;
|
||||
import com.huawei.ecterminalsdk.models.TsdkCommonResult;
|
||||
import com.huawei.ecterminalsdk.models.call.TsdkCall;
|
||||
@ -57,6 +57,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.utils.AppUtils;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -8,7 +8,7 @@ import android.view.WindowManager;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.chatmodule.CallSessionCallback;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tengshisoft.chatmodule.beans.EnumType;
|
||||
@ -21,6 +21,7 @@ import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.constant.PermissionConstants;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.utils.PermissionUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -22,7 +22,7 @@ import android.widget.TextView;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkCallInfo;
|
||||
import com.huawei.ecterminalsdk.models.TsdkCommonResult;
|
||||
import com.huawei.ecterminalsdk.models.call.TsdkCall;
|
||||
@ -75,6 +75,7 @@ import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.PermissionUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -22,7 +22,7 @@ import android.widget.TextView;
|
||||
import com.allen.library.SuperTextView;
|
||||
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
|
||||
import com.bigkoo.pickerview.view.OptionsPickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkConfRole;
|
||||
import com.huawei.ecterminalsdk.base.TsdkLdapContactsInfo;
|
||||
import com.huawei.ecterminalsdk.base.TsdkMobileAuidoRoute;
|
||||
@ -82,6 +82,7 @@ import com.tenlionsoft.baselib.constant.ConfConstant;
|
||||
import com.tenlionsoft.baselib.core.beans.Member;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
@ -17,7 +17,7 @@ import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkConfAttendeeInfo;
|
||||
import com.huawei.ecterminalsdk.base.TsdkConfSpeaker;
|
||||
import com.huawei.ecterminalsdk.base.TsdkConfTerminalType;
|
||||
@ -42,6 +42,7 @@ import com.tengshisoft.chatmodule.hwclud.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.constant.ConstantsV2;
|
||||
import com.tenlionsoft.baselib.core.beans.Member;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -31,7 +31,7 @@ import android.widget.TextView;
|
||||
|
||||
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
|
||||
import com.bigkoo.pickerview.view.OptionsPickerView;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkConfRole;
|
||||
import com.huawei.ecterminalsdk.base.TsdkMobileAuidoRoute;
|
||||
import com.huawei.ecterminalsdk.base.TsdkNotifyHandUpAttendee;
|
||||
@ -106,6 +106,7 @@ import com.tenlionsoft.baselib.constant.BroadcastConstant;
|
||||
import com.tenlionsoft.baselib.constant.ConfConstant;
|
||||
import com.tenlionsoft.baselib.core.beans.Member;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
@ -4,7 +4,7 @@ package com.tengshisoft.chatmodule.hwclud.manager;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkAuthType;
|
||||
import com.huawei.ecterminalsdk.base.TsdkFailedInfo;
|
||||
import com.huawei.ecterminalsdk.base.TsdkForceLogoutInfo;
|
||||
@ -38,6 +38,7 @@ import com.tenlionsoft.baselib.constant.BroadcastConstant;
|
||||
import com.tenlionsoft.baselib.constant.ConstantsV2;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
@ -20,7 +20,7 @@ import android.view.ViewConfiguration;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.models.call.TsdkCall;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tengshisoft.chatmodule.activity.SponsorMeetingActivity;
|
||||
@ -39,6 +39,7 @@ import com.tengshisoft.chatmodule.hwclud.utils.Platform;
|
||||
import com.tenlionsoft.baselib.constant.BroadcastConstant;
|
||||
import com.tenlionsoft.baselib.constant.ConstantsV2;
|
||||
import com.tenlionsoft.baselib.core.beans.Member;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
@ -17,12 +17,13 @@ import android.widget.Chronometer;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tengshisoft.chatmodule.activity.SponsorMeetingActivity;
|
||||
import com.tengshisoft.chatmodule.hwclud.listener.FloatingViewListener;
|
||||
import com.tengshisoft.chatmodule.hwclud.manager.FloatingViewManager;
|
||||
import com.tengshisoft.chatmodule.hwclud.utils.LogUtil;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
|
@ -20,7 +20,7 @@ import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkWatchSvcAttendees;
|
||||
import com.huawei.ecterminalsdk.models.call.TsdkCall;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
@ -49,6 +49,7 @@ import com.tenlionsoft.baselib.app.BaseAppContext;
|
||||
import com.tenlionsoft.baselib.constant.BroadcastConstant;
|
||||
import com.tenlionsoft.baselib.core.beans.Member;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -6,7 +6,7 @@ import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkAttendee;
|
||||
import com.huawei.ecterminalsdk.base.TsdkAudioNetQuality;
|
||||
import com.huawei.ecterminalsdk.base.TsdkAuxTokenOwnerInd;
|
||||
@ -91,6 +91,7 @@ import com.tenlionsoft.baselib.constant.ConstantsV2;
|
||||
import com.tenlionsoft.baselib.core.beans.Member;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.TimerTask;
|
||||
|
||||
|
@ -9,7 +9,7 @@ import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.huawei.ecterminalsdk.base.TsdkWatchSvcAttendees;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tengshisoft.chatmodule.R2;
|
||||
@ -22,6 +22,7 @@ import com.tengshisoft.chatmodule.hwclud.receiver.LocalBroadcast;
|
||||
import com.tengshisoft.chatmodule.hwclud.receiver.LocalBroadcastReceiver;
|
||||
import com.tengshisoft.chatmodule.hwclud.utils.LogUtil;
|
||||
import com.tenlionsoft.baselib.constant.BroadcastConstant;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
@ -14,7 +14,7 @@ import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tengshisoft.chatmodule.activity.ChatActivity;
|
||||
import com.tengshisoft.chatmodule.activity.InvitedPointCallActivity;
|
||||
@ -35,6 +35,7 @@ import com.tenlionsoft.baselib.app.BaseAppContext;
|
||||
import com.tenlionsoft.baselib.constant.ConstantsV2;
|
||||
import com.tenlionsoft.baselib.core.widget.views.LoadingDialog;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -8,9 +8,10 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.chatmodule.hwclud.listener.OrientationListener;
|
||||
import com.tengshisoft.chatmodule.hwclud.utils.LogUtil;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
|
@ -7,7 +7,6 @@ import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.huawei.ecterminalsdk.base.TsdkConfSpeakerInfo
|
||||
import com.huawei.ecterminalsdk.base.TsdkWatchSvcAttendees
|
||||
import com.tengshisoft.chatmodule.R
|
||||
@ -24,6 +23,7 @@ import com.tengshisoft.chatmodule.hwclud.utils.*
|
||||
import com.tenlionsoft.baselib.constant.BroadcastConstant
|
||||
import com.tenlionsoft.baselib.constant.ConfConstant
|
||||
import com.tenlionsoft.baselib.core.beans.Member
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils
|
||||
import kotlinx.android.synthetic.main.fragment_svc_video.*
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
@ -14,7 +14,8 @@ import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
|
@ -9,9 +9,10 @@ import android.provider.Settings;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tenlionsoft.baselib.app.BaseAppContext;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
|
@ -40,12 +40,13 @@ import android.widget.Spinner;
|
||||
import android.widget.SpinnerAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.chatmodule.R;
|
||||
import com.tenlionsoft.baselib.app.BaseAppContext;
|
||||
import com.tenlionsoft.baselib.core.beans.Member;
|
||||
import com.tenlionsoft.baselib.utils.EncryptedSPTool;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.security.InvalidParameterException;
|
||||
|
@ -6,7 +6,8 @@ import android.content.Intent;
|
||||
import android.media.AsyncPlayer;
|
||||
import android.util.Log;
|
||||
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -11,7 +11,7 @@ import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
@ -22,6 +22,7 @@ import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -35,7 +35,7 @@ import com.baidu.mapapi.model.LatLng;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
import com.tengshisoft.commonmodule.adapters.IncidentTagListAdapter;
|
||||
@ -64,6 +64,7 @@ import com.tenlionsoft.baselib.core.widget.views.DiffcultDialog;
|
||||
import com.tenlionsoft.baselib.core.widget.views.OperatePopup;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -14,7 +14,7 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
@ -26,6 +26,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -42,7 +42,7 @@ import com.bigkoo.pickerview.view.TimePickerView;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
import com.tengshisoft.commonmodule.adapters.CommunityUserListBean;
|
||||
@ -70,6 +70,7 @@ import com.tenlionsoft.baselib.core.widget.videorecord.MediaManager;
|
||||
import com.tenlionsoft.baselib.core.widget.views.OperatePopup;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.TimeUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -18,7 +18,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
@ -30,6 +30,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -18,7 +18,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
@ -30,6 +30,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -42,7 +42,7 @@ import com.bigkoo.pickerview.view.TimePickerView;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
import com.tengshisoft.commonmodule.adapters.CommunityUserListBean;
|
||||
@ -68,6 +68,7 @@ import com.tenlionsoft.baselib.core.widget.videorecord.MediaManager;
|
||||
import com.tenlionsoft.baselib.core.widget.views.OperatePopup;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.TimeUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -14,7 +14,7 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commandmodule.R;
|
||||
import com.tengshisoft.commandmodule.R2;
|
||||
@ -26,6 +26,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -15,7 +15,7 @@ import androidx.viewpager2.widget.ViewPager2;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
@ -27,6 +27,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseViewPage2Adapter;
|
||||
import com.tenlionsoft.baselib.core.widget.base.ViewPageNavigatorAdapter;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ConditionAreaPopup;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -19,7 +19,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
@ -34,6 +34,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ConditionAreaPopup;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -34,7 +34,7 @@ import com.baidu.mapapi.model.LatLng;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
@ -64,6 +64,7 @@ import com.tenlionsoft.baselib.core.widget.views.CenterInputViewBase;
|
||||
import com.tenlionsoft.baselib.core.widget.views.CenterTextAndInputView;
|
||||
import com.tenlionsoft.baselib.core.widget.views.OperatePopup;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -14,7 +14,7 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
@ -27,6 +27,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -36,7 +36,7 @@ import com.baidu.mapapi.model.LatLng;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
@ -61,6 +61,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseShowPhotoAdapter;
|
||||
import com.tenlionsoft.baselib.core.widget.videorecord.MediaManager;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ButtomDialogView;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -15,7 +15,7 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.jakewharton.rxbinding3.widget.RxTextView;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
@ -28,6 +28,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -9,7 +9,7 @@ import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
@ -20,6 +20,7 @@ import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -30,7 +30,7 @@ import com.baidu.mapapi.model.LatLng;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
import com.tengshisoft.commonmodule.adapters.IncidentTagListAdapter;
|
||||
@ -55,6 +55,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseShowPhotoAdapter;
|
||||
import com.tenlionsoft.baselib.core.widget.videorecord.MediaManager;
|
||||
import com.tenlionsoft.baselib.core.widget.views.OperatePopup;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -6,7 +6,7 @@ import android.view.View;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
import com.tenlionsoft.baselib.constant.PathConfig;
|
||||
@ -14,6 +14,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseViewPage2Adapter;
|
||||
import com.tenlionsoft.baselib.core.widget.base.ViewPageNavigatorAdapter;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
|
||||
import net.lucode.hackware.magicindicator.MagicIndicator;
|
||||
|
@ -39,7 +39,7 @@ import com.baidu.mapapi.model.LatLng;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
@ -75,6 +75,7 @@ import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.core.widget.views.OperatePopup;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -15,7 +15,7 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.jakewharton.rxbinding3.widget.RxTextView;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
@ -28,6 +28,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -29,7 +29,7 @@ import com.baidu.mapapi.model.LatLng;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
@ -49,6 +49,7 @@ import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseShowPhotoAdapter;
|
||||
import com.tenlionsoft.baselib.core.widget.videorecord.MediaManager;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -42,7 +42,7 @@ import com.baidu.mapapi.model.LatLng;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
import com.tengshisoft.commonmodule.adapters.DeferRecordAdapter;
|
||||
@ -75,6 +75,7 @@ import com.tenlionsoft.baselib.core.widget.views.CenterInputView;
|
||||
import com.tenlionsoft.baselib.core.widget.views.CenterTimeAndIntputView;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.LogUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -15,7 +15,7 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.jakewharton.rxbinding3.widget.RxTextView;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
@ -28,6 +28,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -15,7 +15,7 @@ import android.widget.TextView;
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.jakewharton.rxbinding3.widget.RxTextView;
|
||||
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
@ -28,6 +28,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
@ -10,7 +10,7 @@ import android.widget.TextView;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.google.gson.Gson;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tengshisoft.commonmodule.R;
|
||||
import com.tengshisoft.commonmodule.R2;
|
||||
import com.tengshisoft.commonmodule.beans.IncidentOverseeDetailBean;
|
||||
@ -22,6 +22,7 @@ import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
|
||||
import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
|
||||
import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
|
||||
import com.tenlionsoft.baselib.utils.ExceptionHandler;
|
||||
import com.tenlionsoft.baselib.utils.ToastUtils;
|
||||
import com.tenlionsoft.baselib.utils.UIUtil;
|
||||
import com.tenlionsoft.baselib.utils.UserLgUtils;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user