Skip to content

Commit 2a2887c

Browse files
committed
see 03/29 log
1 parent 897ba1b commit 2a2887c

File tree

12 files changed

+386
-10
lines changed

12 files changed

+386
-10
lines changed

README-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
4343

44-
[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.5-brightgreen.svg
44+
[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.6-brightgreen.svg
4545
[auc]: https://github.com/Blankj/AndroidUtilCode
4646

4747
[apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ If this ptoject helps you a lot, and you would like to support this ptoject's fu
4141

4242
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png
4343

44-
[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.5-brightgreen.svg
44+
[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.6-brightgreen.svg
4545
[auc]: https://github.com/Blankj/AndroidUtilCode
4646

4747
[apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ android {
4848

4949
dependencies {
5050
implementation fileTree(include: ['*.jar'], dir: 'libs')
51-
implementation project(':utilcode')
51+
// implementation project(':utilcode')
5252
implementation project(':subutil')
5353
implementation "com.android.support:appcompat-v7:$support_version"
5454
implementation "com.android.support:design:$support_version"
5555
implementation 'com.r0adkll:slidableactivity:2.0.5'
5656
// LeakCanary
5757
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakcanary_version"
5858
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version"
59-
// implementation 'com.blankj:utilcode:1.13.5'
59+
implementation 'com.blankj:utilcode:1.13.6'
6060
}
6161

6262

app/src/main/java/com/blankj/androidutilcode/feature/core/bar/BarStatusFragmentActivity.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void initView(Bundle savedInstanceState, View view) {
6565
mFragmentList.add(BarStatusAlphaFragment.newInstance());
6666
mFragmentList.add(BarStatusImageViewFragment.newInstance());
6767

68-
68+
mVpStatusBar.setOffscreenPageLimit(2);
6969
mVpStatusBar.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
7070
@Override
7171
public Fragment getItem(int position) {
@@ -96,7 +96,6 @@ public void onPageScrollStateChanged(int state) {
9696
});
9797

9898
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
99-
10099
}
101100

102101
@Override

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ ext {
3333
min_sdk_version = 14
3434
target_sdk_version = 27
3535

36-
version_code = 1_013_005
37-
version_name = '1.13.5'// E.g 1.9.72 => 1,009,072
36+
version_code = 1_013_006
37+
version_name = '1.13.6'// E.g 1.9.72 => 1,009,072
3838

3939
// App dependencies
4040
support_version = '27.0.2'
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package com.blankj.subutil.util;
2+
3+
import android.util.Log;
4+
5+
/**
6+
* <pre>
7+
* author: Blankj
8+
* blog : http://blankj.com
9+
* time : 2018/03/21
10+
* desc :
11+
* </pre>
12+
*/
13+
public class BitUtils {
14+
15+
private BitUtils() {
16+
throw new UnsupportedOperationException("u can't instantiate me...");
17+
}
18+
19+
/**
20+
* 获取运算数指定位置的值<br>
21+
* 例如: 0000 1011 获取其第 0 位的值为 1, 第 2 位 的值为 0<br>
22+
*
23+
* @param source 需要运算的数
24+
* @param pos 指定位置 (0...7)
25+
* @return 指定位置的值(0 or 1)
26+
*/
27+
public static byte getBitValue(byte source, int pos) {
28+
return (byte) ((source >> pos) & 1);
29+
30+
}
31+
32+
33+
/**
34+
* 将运算数指定位置的值置为指定值<br>
35+
* 例: 0000 1011 需要更新为 0000 1111, 即第 2 位的值需要置为 1<br>
36+
*
37+
* @param source 需要运算的数
38+
* @param pos 指定位置 (0<=pos<=7)
39+
* @param value 只能取值为 0, 或 1, 所有大于0的值作为1处理, 所有小于0的值作为0处理
40+
* @return 运算后的结果数
41+
*/
42+
public static byte setBitValue(byte source, int pos, byte value) {
43+
44+
byte mask = (byte) (1 << pos);
45+
if (value > 0) {
46+
source |= mask;
47+
48+
} else {
49+
source &= (~mask);
50+
51+
}
52+
return source;
53+
}
54+
55+
56+
/**
57+
* 将运算数指定位置取反值<br>
58+
* 例: 0000 1011 指定第 3 位取反, 结果为 0000 0011; 指定第2位取反, 结果为 0000 1111<br>
59+
*
60+
* @param source
61+
* @param pos 指定位置 (0<=pos<=7)
62+
* @return 运算后的结果数
63+
*/
64+
public static byte reverseBitValue(byte source, int pos) {
65+
byte mask = (byte) (1 << pos);
66+
return (byte) (source ^ mask);
67+
68+
}
69+
70+
71+
/**
72+
* 检查运算数的指定位置是否为1<br>
73+
*
74+
* @param source 需要运算的数
75+
* @param pos 指定位置 (0<=pos<=7)
76+
* @return true 表示指定位置值为1, false 表示指定位置值为 0
77+
*/
78+
public static boolean checkBitValue(byte source, int pos) {
79+
80+
source = (byte) (source >>> pos);
81+
82+
return (source & 1) == 1;
83+
84+
}
85+
86+
/**
87+
* 入口函数做测试<br>
88+
*
89+
* @param args
90+
*/
91+
public static void main(String[] args) {
92+
// 取十进制 11 (二级制 0000 1011) 为例子
93+
byte source = 11;
94+
// 取第2位值并输出, 结果应为 0000 1011
95+
for (byte i = 7; i >= 0; i--) {
96+
Log.d("BitUtils", getBitValue(source, i) + "");
97+
98+
}
99+
// 将第6位置为1并输出 , 结果为 75 (0100 1011)
100+
Log.d("BitUtils", setBitValue(source, 6, (byte) 1) + "");
101+
102+
// 将第6位取反并输出, 结果应为75(0100 1011)
103+
Log.d("BitUtils", reverseBitValue(source, 6) + "");
104+
105+
// 检查第6位是否为1,结果应为false
106+
Log.d("BitUtils", checkBitValue(source, 6) + "");
107+
108+
// 输出为1的位, 结果应为 0 1 3
109+
for (byte i = 0; i < 8; i++) {
110+
if (checkBitValue(source, i)) {
111+
Log.d("BitUtils", i + "");
112+
}
113+
}
114+
}
115+
}
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package com.blankj.subutil.util;
2+
3+
import static java.lang.Math.PI;
4+
5+
/**
6+
* <pre>
7+
* author: Blankj
8+
* blog : http://blankj.com
9+
* time : 2018/03/21
10+
* desc :
11+
* </pre>
12+
*/
13+
public class CoordinateConvertUtils {
14+
15+
private final static double X_PI = 3.14159265358979324 * 3000.0 / 180.0;
16+
private final static double A = 6378245.0;
17+
private final static double EE = 0.00669342162296594323;
18+
19+
/**
20+
* BD09 坐标转 GCJ02 坐标
21+
*
22+
* @param lng BD09 坐标纬度
23+
* @param lat BD09 坐标经度
24+
* @return GCJ02 坐标:[经度,纬度]
25+
*/
26+
public static double[] bd09ToGcj02(double lng, double lat) {
27+
double x = lng - 0.0065;
28+
double y = lat - 0.006;
29+
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);
30+
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);
31+
double gg_lng = z * Math.cos(theta);
32+
double gg_lat = z * Math.sin(theta);
33+
return new double[]{gg_lng, gg_lat};
34+
}
35+
36+
/**
37+
* GCJ02 坐标转 BD09 坐标
38+
*
39+
* @param lng GCJ02 坐标经度
40+
* @param lat GCJ02 坐标纬度
41+
* @return BD09 坐标:[经度,纬度]
42+
*/
43+
public static double[] gcj02ToBd09(double lng, double lat) {
44+
double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * X_PI);
45+
double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * X_PI);
46+
double bd_lng = z * Math.cos(theta) + 0.0065;
47+
double bd_lat = z * Math.sin(theta) + 0.006;
48+
return new double[]{bd_lng, bd_lat};
49+
}
50+
51+
/**
52+
* GCJ02 坐标转 WGS84 坐标
53+
*
54+
* @param lng GCJ02 坐标经度
55+
* @param lat GCJ02 坐标纬度
56+
* @return WGS84 坐标:[经度,纬度]
57+
*/
58+
public static double[] gcj02ToWGS84(double lng, double lat) {
59+
if (outOfChina(lng, lat)) {
60+
return new double[]{lng, lat};
61+
}
62+
double dlat = transformLat(lng - 105.0, lat - 35.0);
63+
double dlng = transformLng(lng - 105.0, lat - 35.0);
64+
double radlat = lat / 180.0 * PI;
65+
double magic = Math.sin(radlat);
66+
magic = 1 - EE * magic * magic;
67+
double sqrtmagic = Math.sqrt(magic);
68+
dlat = (dlat * 180.0) / ((A * (1 - EE)) / (magic * sqrtmagic) * PI);
69+
dlng = (dlng * 180.0) / (A / sqrtmagic * Math.cos(radlat) * PI);
70+
double mglat = lat + dlat;
71+
double mglng = lng + dlng;
72+
return new double[]{lng * 2 - mglng, lat * 2 - mglat};
73+
}
74+
75+
/**
76+
* WGS84 坐标 转 GCJ02 坐标
77+
*
78+
* @param lng WGS84 坐标经度
79+
* @param lat WGS84 坐标纬度
80+
* @return GCJ02 坐标:[经度,纬度]
81+
*/
82+
public static double[] wgs84ToGcj02(double lng, double lat) {
83+
if (outOfChina(lng, lat)) {
84+
return new double[]{lng, lat};
85+
}
86+
double dlat = transformLat(lng - 105.0, lat - 35.0);
87+
double dlng = transformLng(lng - 105.0, lat - 35.0);
88+
double radlat = lat / 180.0 * PI;
89+
double magic = Math.sin(radlat);
90+
magic = 1 - EE * magic * magic;
91+
double sqrtmagic = Math.sqrt(magic);
92+
dlat = (dlat * 180.0) / ((A * (1 - EE)) / (magic * sqrtmagic) * PI);
93+
dlng = (dlng * 180.0) / (A / sqrtmagic * Math.cos(radlat) * PI);
94+
double mglat = lat + dlat;
95+
double mglng = lng + dlng;
96+
return new double[]{mglng, mglat};
97+
}
98+
99+
/**
100+
* BD09 坐标 转 WGS84 坐标
101+
*
102+
* @param lng BD09 坐标经度
103+
* @param lat BD09 坐标纬度
104+
* @return WGS84 坐标:[经度,纬度]
105+
*/
106+
public static double[] bd09ToWGS84(double lng, double lat) {
107+
double[] gcj = bd09ToGcj02(lng, lat);
108+
return gcj02ToWGS84(gcj[0], gcj[1]);
109+
}
110+
111+
112+
/**
113+
* WGS84 坐标转 BD09 坐标
114+
*
115+
* @param lng WGS84 坐标经度
116+
* @param lat WGS84 坐标纬度
117+
* @return BD09 坐标:[经度,纬度]
118+
*/
119+
public static double[] wgs84ToBd09(double lng, double lat) {
120+
double[] gcj = wgs84ToGcj02(lng, lat);
121+
return gcj02ToBd09(gcj[0], gcj[1]);
122+
}
123+
124+
private static double transformLat(double lng, double lat) {
125+
double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
126+
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
127+
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
128+
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
129+
return ret;
130+
}
131+
132+
private static double transformLng(double lng, double lat) {
133+
double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
134+
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
135+
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
136+
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
137+
return ret;
138+
}
139+
140+
/**
141+
* 判断坐标是否不在国内
142+
*
143+
* @param lng 经度
144+
* @param lat 纬度
145+
* @return 坐标是否在国内
146+
*/
147+
public static boolean outOfChina(double lng, double lat) {
148+
return lng < 72.004 || lng > 137.8347 || lat < 0.8293 || lat > 55.8271;
149+
}
150+
}

0 commit comments

Comments
 (0)