Skip to content

Commit 79e0277

Browse files
feat(ALL): 同步Kotlin版本功能
1 parent 5c4f6ae commit 79e0277

34 files changed

+468
-163
lines changed

app/src/main/java/com/pengxh/androidx/lib/MainActivity.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
package com.pengxh.androidx.lib;
22

33
import android.content.Context;
4-
import android.graphics.Bitmap;
5-
import android.graphics.BitmapFactory;
6-
import android.util.Log;
74
import android.view.View;
85

96
import com.pengxh.androidx.lib.databinding.ActivityMainBinding;
107
import com.pengxh.androidx.lite.base.AndroidxBaseActivity;
11-
import com.pengxh.androidx.lite.utils.ImageUtil;
12-
import com.pengxh.androidx.lite.widget.EasyPopupWindow;
138

149
public class MainActivity extends AndroidxBaseActivity<ActivityMainBinding> {
1510

1611
private static final String TAG = "MainActivity";
1712
private final Context context = MainActivity.this;
18-
private final int[] POPUP_IMAGES = new int[]{R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d};
19-
private final String[] POPUP_TITLES = new String[]{"标准地图", "卫星地图", "3D地图"};
2013

2114
@Override
2215
protected void setupTopBarLayout() {
@@ -25,26 +18,15 @@ protected void setupTopBarLayout() {
2518

2619
@Override
2720
protected void initData() {
28-
//原型图片
29-
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test);
30-
viewBinding.imageView.setImageDrawable(ImageUtil.createRoundDrawable(this, bitmap, 0, 0));
21+
3122
}
3223

3324
@Override
3425
protected void initEvent() {
35-
EasyPopupWindow easyPopupWindow = new EasyPopupWindow(context);
36-
easyPopupWindow.setPopupMenuItem(POPUP_IMAGES, POPUP_TITLES);
37-
easyPopupWindow.setOnPopupWindowClickListener(new EasyPopupWindow.OnPopupWindowClickListener() {
38-
@Override
39-
public void onPopupItemClicked(int position) {
40-
Log.d(TAG, "onPopupItemClicked: " + POPUP_TITLES[position]);
41-
}
42-
});
4326
viewBinding.button.setOnClickListener(new View.OnClickListener() {
4427
@Override
4528
public void onClick(View v) {
46-
int x = viewBinding.button.getWidth() - easyPopupWindow.getWidth();
47-
easyPopupWindow.showAsDropDown(viewBinding.button, x, 0);
29+
4830
}
4931
});
5032
}
Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,13 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools"
43
android:layout_width="match_parent"
54
android:layout_height="match_parent"
6-
android:orientation="vertical"
7-
tools:context=".MainActivity">
8-
9-
<ImageView
10-
android:id="@+id/imageView"
11-
android:layout_width="wrap_content"
12-
android:layout_height="wrap_content"
13-
android:layout_centerInParent="true"
14-
android:src="@mipmap/test" />
5+
android:orientation="vertical">
156

167
<Button
178
android:id="@+id/button"
189
android:layout_width="wrap_content"
1910
android:layout_height="wrap_content"
20-
android:layout_alignParentBottom="true"
21-
android:layout_centerHorizontal="true"
11+
android:layout_centerInParent="true"
2212
android:text="发送广播" />
2313
</RelativeLayout>

lite/build.gradle

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,17 @@ dependencies {
3434
implementation "androidx.recyclerview:recyclerview:1.2.1"
3535
implementation 'io.reactivex:rxjava:1.3.8'
3636
implementation 'io.reactivex:rxandroid:1.2.1'
37-
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
3837
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
38+
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
3939
implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
40+
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
4041
implementation 'com.squareup.retrofit2:adapter-rxjava:2.8.1'
4142
implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0'
43+
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
4244
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
4345
implementation 'com.github.bumptech.glide:glide:4.9.0'
46+
//高德导航(高德导航和高德地图会重复,不兼容,只能选其一)
47+
implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0'
48+
//图表
49+
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
4450
}

lite/src/main/java/com/pengxh/androidx/lite/adapter/EditableImageAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void setImageMargins(float leftMargin, float rightMargin, float padding)
6565
@Override
6666
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
6767
ImageView imageView = new ImageView(context);
68-
int realWidth = DeviceSizeUtil.getScreenWidth(context)
68+
int realWidth = DeviceSizeUtil.obtainScreenWidth(context)
6969
- DeviceSizeUtil.dp2px(context, leftMargin)
7070
- DeviceSizeUtil.dp2px(context, rightMargin);
7171
int itemSize = (realWidth - 4 * padding) / 3;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.pengxh.androidx.lite.callback;
2+
3+
import java.io.File;
4+
5+
public interface OnDownloadListener {
6+
void onDownloadStart(long totalBytes);
7+
8+
void onProgressChanged(long currentBytes);
9+
10+
void onDownloadEnd(File file);
11+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.pengxh.androidx.lite.callback;
2+
3+
import okhttp3.Response;
4+
5+
public interface OnHttpRequestListener {
6+
void onSuccess(Response response);
7+
8+
void onFailure(Throwable throwable);
9+
}
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
package com.pengxh.androidx.lite.utils;
2+
3+
import android.content.Context;
4+
import android.graphics.Color;
5+
6+
import com.github.mikephil.charting.animation.Easing;
7+
import com.github.mikephil.charting.charts.BarChart;
8+
import com.github.mikephil.charting.charts.Chart;
9+
import com.github.mikephil.charting.charts.HorizontalBarChart;
10+
import com.github.mikephil.charting.charts.LineChart;
11+
import com.github.mikephil.charting.charts.PieChart;
12+
import com.github.mikephil.charting.components.Legend;
13+
import com.github.mikephil.charting.components.XAxis;
14+
import com.github.mikephil.charting.components.YAxis;
15+
import com.github.mikephil.charting.formatter.ValueFormatter;
16+
import com.pengxh.androidx.lite.R;
17+
18+
import java.util.List;
19+
20+
/**
21+
* MPAndroidChart初始化类
22+
*/
23+
public class ChartUtil {
24+
25+
public static void initLineChart(Context context, LineChart chart) {
26+
chart.setNoDataText("无数据,无法渲染...");
27+
chart.setNoDataTextColor(R.color.red);
28+
chart.getPaint(Chart.PAINT_INFO).setTextSize(DeviceSizeUtil.sp2px(context, 14f));
29+
chart.setDrawGridBackground(false);
30+
chart.setDrawBorders(false);
31+
chart.animateY(1200, Easing.EaseInOutQuad);
32+
//设置样式
33+
YAxis rightAxis = chart.getAxisRight();
34+
//设置图表右边的y轴禁用
35+
rightAxis.setEnabled(false);
36+
YAxis leftAxis = chart.getAxisLeft();
37+
leftAxis.setAxisMinimum(0f);
38+
chart.setScaleXEnabled(true); //X轴可缩放
39+
chart.setScaleYEnabled(false); //Y轴不可缩放
40+
//设置x轴
41+
XAxis xAxis = chart.getXAxis();
42+
xAxis.setTextColor(ColorUtil.convertColor(context, R.color.lib_text_color));
43+
xAxis.setTextSize(DeviceSizeUtil.sp2px(context, 10f));
44+
xAxis.setLabelCount(7, true);
45+
xAxis.setDrawLabels(true); //绘制标签 指x轴上的对应数值
46+
xAxis.setDrawAxisLine(true); //是否绘制轴线
47+
xAxis.setDrawGridLines(false); //设置x轴上每个点对应的线
48+
xAxis.setGranularity(1f); //禁止放大后x轴标签重绘
49+
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
50+
chart.setExtraBottomOffset(5f); //解决X轴显示不完全问题
51+
//去掉描述
52+
chart.getDescription().setEnabled(false);
53+
//设置图例
54+
setChartLegend(chart.getLegend());
55+
}
56+
57+
public static void initPieChart(Context context, PieChart chart) {
58+
chart.setNoDataText("无数据,无法渲染...");
59+
chart.setNoDataTextColor(R.color.red);
60+
chart.getPaint(Chart.PAINT_INFO).setTextSize(DeviceSizeUtil.sp2px(context, 14f));
61+
chart.setUsePercentValues(false); //百分比数字显示
62+
chart.getDescription().setEnabled(false);
63+
chart.setDragDecelerationFrictionCoef(0.95f); //图表转动阻力摩擦系数[0,1]
64+
chart.setBackgroundColor(Color.WHITE); //设置图表背景色
65+
chart.setRotationAngle(0f);
66+
chart.setRotationEnabled(false);
67+
chart.setHighlightPerTapEnabled(true);
68+
chart.animateY(1200, Easing.EaseInOutQuad); // 设置图表展示动画效果
69+
chart.setDrawEntryLabels(false); //不显示分类标签
70+
chart.setDrawHoleEnabled(false); //圆环显示
71+
chart.setDrawCenterText(false); //圆环中心文字
72+
chart.setEntryLabelColor(R.color.blue); //图表文本字体颜色
73+
chart.setEntryLabelTextSize(12f);
74+
//设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
75+
chart.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f);
76+
//设置图例位置
77+
setChartLegend(chart.getLegend());
78+
}
79+
80+
public static void initBarChart(Context context, BarChart chart, List<String> barLabels) {
81+
chart.setNoDataText("无数据,无法渲染...");
82+
chart.setNoDataTextColor(R.color.red);
83+
if (barLabels.isEmpty()) {
84+
chart.clearValues();
85+
return;
86+
}
87+
chart.getPaint(Chart.PAINT_INFO).setTextSize(DeviceSizeUtil.sp2px(context, 14f));
88+
chart.animateY(1200, Easing.EaseInOutQuad);
89+
chart.setDrawGridBackground(false);
90+
chart.setDrawBorders(false);
91+
chart.setScaleEnabled(false);
92+
//去掉描述
93+
chart.getDescription().setEnabled(false);
94+
//去掉图例
95+
chart.getLegend().setEnabled(false);
96+
XAxis xAxis = chart.getXAxis();
97+
xAxis.setTextColor(ColorUtil.convertColor(context, R.color.lib_text_color));
98+
xAxis.setDrawLabels(true); //绘制标签 指x轴上的对应数值
99+
xAxis.setLabelCount(barLabels.size()); // 设置x轴上的标签个数
100+
xAxis.setValueFormatter(new ValueFormatter() {
101+
@Override
102+
public String getFormattedValue(float value) {
103+
return barLabels.get((int) value);
104+
}
105+
});
106+
xAxis.setDrawAxisLine(true); //是否绘制轴线
107+
xAxis.setDrawGridLines(false); //设置x轴上每个点对应的线
108+
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
109+
xAxis.setLabelRotationAngle(-45); //X轴标签斜45度
110+
chart.setExtraRightOffset(5f); //解决X轴显示不完全问题
111+
//设置样式
112+
YAxis rightAxis = chart.getAxisRight();
113+
//设置图表右边的y轴禁用
114+
rightAxis.setEnabled(false);
115+
YAxis leftAxis = chart.getAxisLeft();
116+
leftAxis.setAxisMinimum(0f);
117+
}
118+
119+
public static void initHorizontalBarChart(Context context, HorizontalBarChart chart, List<String> barLabels) {
120+
chart.setNoDataText("无数据,无法渲染...");
121+
chart.setNoDataTextColor(R.color.red);
122+
if (barLabels.isEmpty()) {
123+
chart.clearValues();
124+
return;
125+
}
126+
chart.getPaint(Chart.PAINT_INFO).setTextSize(DeviceSizeUtil.sp2px(context, 14f));
127+
chart.animateY(1200, Easing.EaseInOutQuad);
128+
chart.setDrawGridBackground(false);
129+
chart.setDrawBorders(false);
130+
chart.setScaleEnabled(false);
131+
//去掉描述
132+
chart.getDescription().setEnabled(false);
133+
//去掉图例
134+
chart.getLegend().setEnabled(false);
135+
XAxis xAxis = chart.getXAxis();
136+
xAxis.setTextColor(ColorUtil.convertColor(context, R.color.lib_text_color));
137+
xAxis.setDrawLabels(true); //绘制标签 指x轴上的对应数值
138+
xAxis.setLabelCount(barLabels.size()); // 设置x轴上的标签个数
139+
xAxis.setValueFormatter(new ValueFormatter() {
140+
@Override
141+
public String getFormattedValue(float value) {
142+
return barLabels.get((int) value);
143+
}
144+
});
145+
xAxis.setDrawAxisLine(true); //是否绘制轴线
146+
xAxis.setDrawGridLines(false); //设置x轴上每个点对应的线
147+
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
148+
chart.setExtraRightOffset(5f); //解决X轴显示不完全问题
149+
//设置样式
150+
YAxis rightAxis = chart.getAxisRight();
151+
//设置图表右边的y轴禁用
152+
rightAxis.setEnabled(false);
153+
YAxis leftAxis = chart.getAxisLeft();
154+
leftAxis.setAxisMinimum(0f);
155+
}
156+
157+
private static void setChartLegend(Legend legend) {
158+
legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
159+
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
160+
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
161+
//图例是否自动换行
162+
legend.setWordWrapEnabled(true);
163+
}
164+
}

lite/src/main/java/com/pengxh/androidx/lite/utils/DeviceSizeUtil.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static DisplayMetrics getDisplayMetrics(Context context) {
2121
*
2222
* @return
2323
*/
24-
public static int getScreenWidth(Context context) {
24+
public static int obtainScreenWidth(Context context) {
2525
return getDisplayMetrics(context).widthPixels;
2626
}
2727

@@ -30,17 +30,13 @@ public static int getScreenWidth(Context context) {
3030
*
3131
* @return
3232
*/
33-
public static int getScreenHeight(Context context) {
34-
return getDisplayMetrics(context).heightPixels + getStatusBarHeight(context);
35-
}
36-
37-
public static int getStatusBarHeight(Context context) {
33+
public static int obtainScreenHeight(Context context) {
3834
int height = 0;
3935
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
4036
if (resourceId > 0) {
4137
height = context.getResources().getDimensionPixelSize(resourceId);
4238
}
43-
return height;
39+
return getDisplayMetrics(context).heightPixels + height;
4440
}
4541

4642
/**
@@ -49,7 +45,7 @@ public static int getStatusBarHeight(Context context) {
4945
* Dpi(dots per inch 像素密度)
5046
* Density 密度
5147
*/
52-
private static float getScreenDensity(Context context) {
48+
private static float obtainScreenDensity(Context context) {
5349
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
5450
DisplayMetrics dm = new DisplayMetrics();
5551
manager.getDefaultDisplay().getMetrics(dm);
@@ -60,7 +56,7 @@ private static float getScreenDensity(Context context) {
6056
* px转dp
6157
*/
6258
public static int px2dp(Context context, float pxValue) {
63-
float scale = getScreenDensity(context);
59+
float scale = obtainScreenDensity(context);
6460
return (int) (pxValue / scale + 0.5f);
6561
}
6662

@@ -75,7 +71,7 @@ public static int dp2px(Context context, float dpValue) {
7571
* sp转换成px
7672
*/
7773
public static int sp2px(Context context, float spValue) {
78-
float fontScale = getScreenDensity(context);
74+
float fontScale = obtainScreenDensity(context);
7975
return (int) (spValue * fontScale + 0.5f);
8076
}
8177
}

lite/src/main/java/com/pengxh/androidx/lite/widget/dialog/DialogLayoutParam.java renamed to lite/src/main/java/com/pengxh/androidx/lite/utils/DialogLayoutParam.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.pengxh.androidx.lite.widget.dialog;
1+
package com.pengxh.androidx.lite.utils;
22

33
import android.app.Dialog;
44
import android.graphics.Color;
@@ -8,8 +8,6 @@
88

99
import androidx.annotation.StyleRes;
1010

11-
import com.pengxh.androidx.lite.utils.DeviceSizeUtil;
12-
1311
public class DialogLayoutParam {
1412
public static void resetParams(Dialog dialog, double ratio) {
1513
Window window = dialog.getWindow();
@@ -19,7 +17,7 @@ public static void resetParams(Dialog dialog, double ratio) {
1917
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
2018
window.getDecorView().setBackgroundColor(Color.TRANSPARENT);
2119
WindowManager.LayoutParams params = window.getAttributes();
22-
params.width = (int) (DeviceSizeUtil.getScreenWidth(dialog.getContext()) * ratio);
20+
params.width = (int) (DeviceSizeUtil.obtainScreenWidth(dialog.getContext()) * ratio);
2321
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
2422
window.setAttributes(params);
2523
}
@@ -35,7 +33,7 @@ public static void resetParams(Dialog dialog, int gravity, @StyleRes int resId,
3533
//设置Dialog出现的动画
3634
window.setWindowAnimations(resId);
3735
WindowManager.LayoutParams params = window.getAttributes();
38-
params.width = (int) (DeviceSizeUtil.getScreenWidth(dialog.getContext()) * ratio);
36+
params.width = (int) (DeviceSizeUtil.obtainScreenWidth(dialog.getContext()) * ratio);
3937
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
4038
window.setAttributes(params);
4139
}

0 commit comments

Comments
 (0)