Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mmm-rain
AndroidUtilCode
提交
968e844a
A
AndroidUtilCode
项目概览
mmm-rain
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
968e844a
编写于
6月 11, 2017
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 06/11 log
上级
44bd2efd
变更
35
展开全部
隐藏空白更改
内联
并排
Showing
35 changed file
with
2333 addition
and
1388 deletion
+2333
-1388
README-CN.md
README-CN.md
+47
-41
README.md
README.md
+39
-33
app/build.gradle
app/build.gradle
+3
-4
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+1
-2
app/src/main/java/com/blankj/androidutilcode/activity/AppActivity.java
...java/com/blankj/androidutilcode/activity/AppActivity.java
+10
-9
app/src/main/java/com/blankj/androidutilcode/activity/ImageActivity.java
...va/com/blankj/androidutilcode/activity/ImageActivity.java
+3
-3
app/src/main/java/com/blankj/androidutilcode/activity/MainActivity.java
...ava/com/blankj/androidutilcode/activity/MainActivity.java
+1
-1
app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java
...com/blankj/androidutilcode/activity/SnackbarActivity.java
+14
-14
app/src/main/java/com/blankj/androidutilcode/activity/SpanActivity.java
...ava/com/blankj/androidutilcode/activity/SpanActivity.java
+253
-0
app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java
...om/blankj/androidutilcode/activity/SpannableActivity.java
+0
-123
app/src/main/java/com/blankj/androidutilcode/activity/ToastActivity.java
...va/com/blankj/androidutilcode/activity/ToastActivity.java
+3
-2
app/src/main/java/com/blankj/androidutilcode/span/BlurMaskFilterSpan.java
...a/com/blankj/androidutilcode/span/BlurMaskFilterSpan.java
+32
-0
app/src/main/java/com/blankj/androidutilcode/span/ForegroundAlphaColorSpan.java
...blankj/androidutilcode/span/ForegroundAlphaColorSpan.java
+26
-0
app/src/main/java/com/blankj/androidutilcode/span/ForegroundAlphaColorSpanGroup.java
...j/androidutilcode/span/ForegroundAlphaColorSpanGroup.java
+47
-0
app/src/main/java/com/blankj/androidutilcode/span/ShadowSpan.java
...main/java/com/blankj/androidutilcode/span/ShadowSpan.java
+40
-0
app/src/main/res/drawable/cheetah.png
app/src/main/res/drawable/cheetah.png
+0
-0
app/src/main/res/drawable/shape_round_rect.xml
app/src/main/res/drawable/shape_round_rect.xml
+0
-0
app/src/main/res/layout/activity_span.xml
app/src/main/res/layout/activity_span.xml
+8
-1
app/src/main/res/layout/snackbar_add.xml
app/src/main/res/layout/snackbar_add.xml
+0
-6
app/src/main/res/layout/snackbar_custom.xml
app/src/main/res/layout/snackbar_custom.xml
+2
-2
app/src/main/res/layout/toast_custom.xml
app/src/main/res/layout/toast_custom.xml
+1
-1
app/src/main/res/values/colors.xml
app/src/main/res/values/colors.xml
+14
-0
app/src/main/res/values/dimens.xml
app/src/main/res/values/dimens.xml
+1
-1
update_log.md
update_log.md
+1
-0
utilcode/build.gradle
utilcode/build.gradle
+3
-4
utilcode/src/main/java/com/blankj/utilcode/util/CacheUtils.java
...de/src/main/java/com/blankj/utilcode/util/CacheUtils.java
+12
-10
utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java
.../src/main/java/com/blankj/utilcode/util/ConvertUtils.java
+7
-4
utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
...src/main/java/com/blankj/utilcode/util/FragmentUtils.java
+26
-19
utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java
...de/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+30
-34
utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java
...ode/src/main/java/com/blankj/utilcode/util/SpanUtils.java
+1583
-0
utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java
...n/java/com/blankj/utilcode/util/SpannableStringUtils.java
+0
-1049
utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java
...de/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+118
-18
utilcode/src/test/java/com/blankj/utilcode/util/CacheUtilsTest.java
...rc/test/java/com/blankj/utilcode/util/CacheUtilsTest.java
+4
-4
utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java
...e/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java
+3
-3
utilcode/src/test/java/com/blankj/utilcode/util/TestUtils.java
...ode/src/test/java/com/blankj/utilcode/util/TestUtils.java
+1
-0
未找到文件。
README-CN.md
浏览文件 @
968e844a
...
...
@@ -492,37 +492,40 @@ addView : 为SnackBar添加布局
dismiss : 取消snackbar显示
```
*
### SpannableString相关→
[
SpannableStringUtils.java
][
spannable.java
]
→
[
Demo
][
spannable.demo
]
```
Builder.setFlag : 设置标识
Builder.setForegroundColor: 设置前景色
Builder.setBackgroundColor: 设置背景色
Builder.setQuoteColor : 设置引用线的颜色
Builder.setLeadingMargin : 设置缩进
Builder.setMargin : 设置间距
Builder.setBullet : 设置列表标记
Builder.setFontSize : 设置字体尺寸
Builder.setFontProportion : 设置字体比例
Builder.setFontXProportion: 设置字体横向比例
Builder.setStrikethrough : 设置删除线
Builder.setUnderline : 设置下划线
Builder.setSuperscript : 设置上标
Builder.setSubscript : 设置下标
Builder.setBold : 设置粗体
Builder.setItalic : 设置斜体
Builder.setBoldItalic : 设置粗斜体
Builder.setFontFamily : 设置字体系列
Builder.setTypeface : 设置字体
Builder.setAlign : 设置对齐
Builder.setBitmap : 设置图片
Builder.setDrawable : 设置图片
Builder.setUri : 设置图片
Builder.setResourceId : 设置图片
Builder.setClickSpan : 设置点击事件
Builder.setUrl : 设置超链接
Builder.setBlur : 设置模糊
Builder.append : 追加样式字符串
Builder.create : 创建样式字符串
*
### SpannableString相关→
[
SpanUtils.java
][
span.java
]
→
[
Demo
][
span.demo
]
```
setFlag : 设置标识
setForegroundColor: 设置前景色
setBackgroundColor: 设置背景色
setLineHeight : 设置行高
setQuoteColor : 设置引用线的颜色
setLeadingMargin : 设置缩进
setBullet : 设置列表标记
setIconMargin : 设置图标
setFontSize : 设置字体尺寸
setFontProportion : 设置字体比例
setFontXProportion: 设置字体横向比例
setStrikethrough : 设置删除线
setUnderline : 设置下划线
setSuperscript : 设置上标
setSubscript : 设置下标
setBold : 设置粗体
setItalic : 设置斜体
setBoldItalic : 设置粗斜体
setFontFamily : 设置字体系列
setTypeface : 设置字体
setAlign : 设置对齐
setClickSpan : 设置点击事件
setUrl : 设置超链接
setBlur : 设置模糊
setShader : 设置着色器
setShadow : 设置阴影
setSpans : 设置样式
append : 追加样式字符串
appendLine : 追加一行样式字符串
appendImage : 追加图片
appendSpace : 追加空白
create : 创建样式字符串
```
*
### SP相关→
[
SPUtils.java
][
sp.java
]
→
[
Test
][
sp.test
]
...
...
@@ -610,14 +613,17 @@ getZodiac : 获取星座
*
### 吐司相关→
[
ToastUtils.java
][
toast.java
]
→
[
Demo
][
toast.demo
]
```
setGravity : 设置吐司位置
setView : 设置吐司view
getView : 获取吐司view
showShortSafe: 安全地显示短时吐司
showLongSafe : 安全地显示长时吐司
showShort : 显示短时吐司
showLong : 显示长时吐司
cancel : 取消吐司显示
setGravity : 设置吐司位置
setView : 设置吐司view
getView : 获取吐司view
setBackgroundColor : 设置背景颜色
setBackgroundResource: 设置背景资源
setMessageColor : 设置消息颜色
showShortSafe : 安全地显示短时吐司
showLongSafe : 安全地显示长时吐司
showShort : 显示短时吐司
showLong : 显示长时吐司
cancel : 取消吐司显示
```
*
### 压缩相关→
[
ZipUtils.java
][
zip.java
]
→
[
Test
][
zip.test
]
...
...
@@ -789,8 +795,8 @@ Utils.init(context);
[
snackbar.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
[
snackbar.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java
[
span
nable.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SpannableString
Utils.java
[
span
nable.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/Spannable
Activity.java
[
span
.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/Span
Utils.java
[
span
.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/Span
Activity.java
[
sp.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java
[
sp.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java
...
...
README.md
浏览文件 @
968e844a
...
...
@@ -492,37 +492,40 @@ addView
dismiss
```
*
### About SpannableString→
[
SpannableStringUtils.java
][
spannable.java
]
→
[
Demo
][
spannable.demo
]
```
Builder.setFlag
Builder.setForegroundColor
Builder.setBackgroundColor
Builder.setQuoteColor
Builder.setLeadingMargin
Builder.setMargin
Builder.setBullet
Builder.setFontSize
Builder.setFontProportion
Builder.setFontXProportion
Builder.setStrikethrough
Builder.setUnderline
Builder.setSuperscript
Builder.setSubscript
Builder.setBold
Builder.setItalic
Builder.setBoldItalic
Builder.setFontFamily
Builder.setTypeface
Builder.setAlign
Builder.setBitmap
Builder.setDrawable
Builder.setUri
Builder.setResourceId
Builder.setClickSpan
Builder.setUrl
Builder.setBlur
Builder.append
Builder.create
*
### About Span→
[
SpanUtils.java
][
span.java
]
→
[
Demo
][
span.demo
]
```
setFlag
setForegroundColor
setBackgroundColor
setLineHeight
setQuoteColor
setLeadingMargin
setBullet
setIconMargin
setFontSize
setFontProportion
setFontXProportion
setStrikethrough
setUnderline
setSuperscript
setSubscript
setBold
setItalic
setBoldItalic
setFontFamily
setTypeface
setAlign
setClickSpan
setUrl
setBlur
setShader
setShadow
setSpans
append
appendLine
appendImage
appendSpace
create
```
*
### About SP→
[
SPUtils.java
][
sp.java
]
→
[
Test
][
sp.test
]
...
...
@@ -613,6 +616,9 @@ getZodiac
setGravity
setView
getView
setBackgroundColor
setBackgroundResource
setMessageColor
showShortSafe
showLongSafe
showShort
...
...
@@ -789,8 +795,8 @@ Utils.init(context);
[
snackbar.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
[
snackbar.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java
[
span
nable.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SpannableString
Utils.java
[
span
nable.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/Spannable
Activity.java
[
span
.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/Span
Utils.java
[
span
.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/Span
Activity.java
[
sp.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java
[
sp.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java
...
...
app/build.gradle
浏览文件 @
968e844a
...
...
@@ -4,14 +4,14 @@ File signPropertiesFile = rootProject.file('sign/keystore.properties')
android
{
compileSdkVersion
25
buildToolsVersion
"25.0.
2
"
buildToolsVersion
"25.0.
3
"
defaultConfig
{
applicationId
"com.blankj.androidutilcode"
minSdkVersion
15
targetSdkVersion
16
versionCode
36
versionName
"1.
6.4
"
versionCode
40
versionName
"1.
7.0
"
}
if
(
signPropertiesFile
.
exists
())
{
...
...
@@ -29,7 +29,6 @@ android {
buildTypes
{
debug
{
minifyEnabled
false
proguardFiles
getDefaultProguardFile
(
'proguard-android.txt'
),
'proguard-rules.pro'
}
release
{
...
...
app/src/main/AndroidManifest.xml
浏览文件 @
968e844a
...
...
@@ -75,9 +75,8 @@
<activity
android:name=
".activity.ProcessActivity"
/>
<activity
android:name=
".activity.SDCardActivity"
/>
<activity
android:name=
".activity.SnackbarActivity"
/>
<activity
android:name=
".activity.Span
nable
Activity"
/>
<activity
android:name=
".activity.SpanActivity"
/>
<activity
android:name=
".activity.ToastActivity"
/>
<activity
android:name=
".activity.CacheActivity"
/>
<service
android:name=
".service.LocationService"
/>
...
...
app/src/main/java/com/blankj/androidutilcode/activity/AppActivity.java
浏览文件 @
968e844a
...
...
@@ -9,7 +9,7 @@ import com.blankj.androidutilcode.Config;
import
com.blankj.androidutilcode.R
;
import
com.blankj.androidutilcode.base.BaseActivity
;
import
com.blankj.utilcode.util.AppUtils
;
import
com.blankj.utilcode.util.Span
nableString
Utils
;
import
com.blankj.utilcode.util.SpanUtils
;
import
com.blankj.utilcode.util.ToastUtils
;
/**
...
...
@@ -42,14 +42,15 @@ public class AppActivity extends BaseActivity {
findViewById
(
R
.
id
.
btn_launch_app
).
setOnClickListener
(
this
);
findViewById
(
R
.
id
.
btn_get_app_details_settings
).
setOnClickListener
(
this
);
TextView
tvAboutApp
=
(
TextView
)
findViewById
(
R
.
id
.
tv_about_app
);
tvAboutApp
.
setText
(
new
SpannableStringUtils
.
Builder
().
append
(
"app icon: "
)
.
appendLine
(
""
).
setDrawable
(
AppUtils
.
getAppIcon
(),
SpannableStringUtils
.
ALIGN_CENTER
)
.
append
(
AppUtils
.
getAppInfo
().
toString
())
.
appendLine
(
"isAppRoot: "
+
AppUtils
.
isAppRoot
())
.
appendLine
(
"isAppDebug: "
+
AppUtils
.
isAppDebug
())
.
appendLine
(
"AppSignatureSHA1: "
+
AppUtils
.
getAppSignatureSHA1
())
.
appendLine
(
"isAppForeground: "
+
AppUtils
.
isAppForeground
())
.
create
());
tvAboutApp
.
setText
(
new
SpanUtils
()
.
append
(
"app icon: "
).
appendImage
(
AppUtils
.
getAppIcon
(),
SpanUtils
.
ALIGN_CENTER
)
.
appendLine
(
AppUtils
.
getAppInfo
().
toString
())
.
appendLine
(
"isAppRoot: "
+
AppUtils
.
isAppRoot
())
.
appendLine
(
"isAppDebug: "
+
AppUtils
.
isAppDebug
())
.
appendLine
(
"AppSignatureSHA1: "
+
AppUtils
.
getAppSignatureSHA1
())
.
appendLine
(
"isAppForeground: "
+
AppUtils
.
isAppForeground
())
.
create
());
}
@Override
...
...
app/src/main/java/com/blankj/androidutilcode/activity/ImageActivity.java
浏览文件 @
968e844a
...
...
@@ -50,8 +50,8 @@ public class ImageActivity extends BaseActivity {
ImageView
ivAddImageWatermark
=
(
ImageView
)
findViewById
(
R
.
id
.
iv_add_image_watermark
);
ImageView
ivGray
=
(
ImageView
)
findViewById
(
R
.
id
.
iv_gray
);
Bitmap
src
=
ImageUtils
.
getBitmap
(
getResources
(),
R
.
drawable
.
lena
);
Bitmap
watermark
=
ImageUtils
.
getBitmap
(
getResources
(),
R
.
mipmap
.
ic_launcher
);
Bitmap
src
=
ImageUtils
.
getBitmap
(
R
.
drawable
.
lena
);
Bitmap
watermark
=
ImageUtils
.
getBitmap
(
R
.
mipmap
.
ic_launcher
);
SizeUtils
.
forceGetViewSize
(
ivSrc
,
new
SizeUtils
.
onGetSizeListener
()
{
@Override
...
...
@@ -63,7 +63,7 @@ public class ImageActivity extends BaseActivity {
ivRoundCorner
.
setImageBitmap
(
ImageUtils
.
toRoundCorner
(
src
,
60
));
ivFastBlur
.
setImageBitmap
(
ImageUtils
.
fastBlur
(
src
,
0.1f
,
5
));
ivRenderScriptBlur
.
setImageBitmap
(
ImageUtils
.
renderScriptBlur
(
src
,
10
));
src
=
ImageUtils
.
getBitmap
(
getResources
(),
R
.
drawable
.
lena
);
src
=
ImageUtils
.
getBitmap
(
R
.
drawable
.
lena
);
ivStackBlur
.
setImageBitmap
(
ImageUtils
.
stackBlur
(
src
,
10
,
false
));
ivAddFrame
.
setImageBitmap
(
ImageUtils
.
addFrame
(
src
,
16
,
Color
.
GREEN
));
ivAddReflection
.
setImageBitmap
(
ImageUtils
.
addReflection
(
src
,
80
));
...
...
app/src/main/java/com/blankj/androidutilcode/activity/MainActivity.java
浏览文件 @
968e844a
...
...
@@ -129,7 +129,7 @@ public class MainActivity extends BaseActivity {
}
public
void
spannableClick
(
View
view
)
{
startActivity
(
new
Intent
(
this
,
Span
nable
Activity
.
class
));
startActivity
(
new
Intent
(
this
,
SpanActivity
.
class
));
}
public
void
toastClick
(
View
view
)
{
...
...
app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java
浏览文件 @
968e844a
...
...
@@ -8,7 +8,7 @@ import android.view.View;
import
com.blankj.androidutilcode.R
;
import
com.blankj.androidutilcode.base.BaseActivity
;
import
com.blankj.utilcode.util.SnackbarUtils
;
import
com.blankj.utilcode.util.Span
nableString
Utils
;
import
com.blankj.utilcode.util.SpanUtils
;
import
com.blankj.utilcode.util.ToastUtils
;
/**
...
...
@@ -22,14 +22,14 @@ import com.blankj.utilcode.util.ToastUtils;
public
class
SnackbarActivity
extends
BaseActivity
{
private
View
snackBarRootView
;
private
final
int
TYPE_SHORT
=
0x00
;
private
final
int
TYPE_SHORT_WITH_ACTION
=
0x01
;
private
final
int
TYPE_LONG
=
0x10
;
private
final
int
TYPE_LONG_WITH_ACTION
=
0x11
;
private
final
int
TYPE_INDEFINITE
=
0x20
;
private
final
int
TYPE_SHORT
=
0x00
;
private
final
int
TYPE_SHORT_WITH_ACTION
=
0x01
;
private
final
int
TYPE_LONG
=
0x10
;
private
final
int
TYPE_LONG_WITH_ACTION
=
0x11
;
private
final
int
TYPE_INDEFINITE
=
0x20
;
private
final
int
TYPE_INDEFINITE_WITH_ACTION
=
0x21
;
private
final
int
TYPE_CUSTOM
=
0x40
;
private
final
int
TYPE_CUSTOM_WITH_ACTION
=
0x41
;
private
final
int
TYPE_CUSTOM
=
0x40
;
private
final
int
TYPE_CUSTOM_WITH_ACTION
=
0x41
;
@Override
public
void
initData
(
Bundle
bundle
)
{
...
...
@@ -94,9 +94,9 @@ public class SnackbarActivity extends BaseActivity {
}
private
void
showSnackbar
(
int
type
)
{
Span
nableStringUtils
.
Builder
builder
=
new
SpannableStringUtils
.
Builder
()
.
append
(
""
).
setResourceId
(
R
.
mipmap
.
ic_launcher
)
.
append
(
""
).
setMargin
(
24
);
Span
Utils
builder
=
new
SpanUtils
()
.
append
(
""
).
appendImage
(
R
.
mipmap
.
ic_launcher
,
SpanUtils
.
ALIGN_CENTER
)
.
append
(
""
).
appendSpace
(
100
);
switch
(
type
)
{
case
TYPE_SHORT:
SnackbarUtils
.
showShort
(
snackBarRootView
,
...
...
@@ -147,8 +147,8 @@ public class SnackbarActivity extends BaseActivity {
SnackbarUtils
.
showShort
(
snackBarRootView
,
""
,
Color
.
BLUE
,
Color
.
LTGRAY
);
SnackbarUtils
.
addView
(
R
.
layout
.
snackbar_
add
,
0
);
Color
.
TRANSPARENT
);
SnackbarUtils
.
addView
(
R
.
layout
.
snackbar_
custom
,
1
);
break
;
case
TYPE_CUSTOM_WITH_ACTION:
SnackbarUtils
.
showShort
(
snackBarRootView
,
...
...
@@ -162,7 +162,7 @@ public class SnackbarActivity extends BaseActivity {
ToastUtils
.
showShort
(
getString
(
R
.
string
.
snackbar_click
));
}
});
SnackbarUtils
.
addView
(
R
.
layout
.
snackbar_
add
,
0
);
SnackbarUtils
.
addView
(
R
.
layout
.
snackbar_
custom
,
0
);
break
;
}
...
...
app/src/main/java/com/blankj/androidutilcode/activity/SpanActivity.java
0 → 100644
浏览文件 @
968e844a
package
com.blankj.androidutilcode.activity
;
import
android.animation.ValueAnimator
;
import
android.content.Context
;
import
android.graphics.BitmapShader
;
import
android.graphics.BlurMaskFilter
;
import
android.graphics.Color
;
import
android.graphics.LinearGradient
;
import
android.graphics.Matrix
;
import
android.graphics.Shader
;
import
android.graphics.Typeface
;
import
android.os.Bundle
;
import
android.text.Layout
;
import
android.text.SpannableStringBuilder
;
import
android.text.TextPaint
;
import
android.text.method.LinkMovementMethod
;
import
android.text.style.ClickableSpan
;
import
android.view.View
;
import
android.view.animation.LinearInterpolator
;
import
android.widget.TextView
;
import
com.blankj.androidutilcode.R
;
import
com.blankj.androidutilcode.base.BaseActivity
;
import
com.blankj.androidutilcode.span.BlurMaskFilterSpan
;
import
com.blankj.androidutilcode.span.ForegroundAlphaColorSpan
;
import
com.blankj.androidutilcode.span.ForegroundAlphaColorSpanGroup
;
import
com.blankj.androidutilcode.span.ShadowSpan
;
import
com.blankj.utilcode.util.ImageUtils
;
import
com.blankj.utilcode.util.SpanUtils
;
import
com.blankj.utilcode.util.ToastUtils
;
import
com.blankj.utilcode.util.Utils
;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2016/09/27
* desc : Span工具类Demo
* </pre>
*/
public
class
SpanActivity
extends
BaseActivity
{
SpanUtils
mSpanUtils
;
SpannableStringBuilder
animSsb
;
int
lineHeight
;
float
textSize
;
ValueAnimator
valueAnimator
;
Shader
mShader
;
float
mShaderWidth
;
Matrix
matrix
;
BlurMaskFilterSpan
mBlurMaskFilterSpan
;
ShadowSpan
mShadowSpan
;
ForegroundAlphaColorSpan
mForegroundAlphaColorSpan
;
ForegroundAlphaColorSpanGroup
mForegroundAlphaColorSpanGroup
;
String
mPrinterString
;
float
density
;
TextView
tvAboutSpan
;
TextView
tvAboutAnimRainbow
;
TextView
tvAboutAnimBlur
;
@Override
public
void
initData
(
Bundle
bundle
)
{
}
@Override
public
int
bindLayout
()
{
return
R
.
layout
.
activity_span
;
}
@Override
public
void
initView
(
Bundle
savedInstanceState
,
View
view
)
{
ClickableSpan
clickableSpan
=
new
ClickableSpan
()
{
@Override
public
void
onClick
(
View
widget
)
{
ToastUtils
.
showShort
(
"事件触发了"
);
}
@Override
public
void
updateDrawState
(
TextPaint
ds
)
{
ds
.
setColor
(
Color
.
BLUE
);
ds
.
setUnderlineText
(
false
);
}
};
tvAboutSpan
=
(
TextView
)
findViewById
(
R
.
id
.
tv_about_span
);
tvAboutAnimRainbow
=
(
TextView
)
findViewById
(
R
.
id
.
tv_about_anim_span
);
// 响应点击事件的话必须设置以下属性
tvAboutSpan
.
setMovementMethod
(
LinkMovementMethod
.
getInstance
());
lineHeight
=
tvAboutSpan
.
getLineHeight
();
textSize
=
tvAboutSpan
.
getTextSize
();
density
=
Utils
.
getContext
().
getResources
().
getDisplayMetrics
().
density
;
tvAboutSpan
.
setText
(
new
SpanUtils
()
.
appendLine
(
"SpanUtils"
).
setBackgroundColor
(
Color
.
LTGRAY
).
setBold
().
setForegroundColor
(
Color
.
YELLOW
).
setAlign
(
Layout
.
Alignment
.
ALIGN_CENTER
)
.
appendLine
(
"前景色"
).
setForegroundColor
(
Color
.
GREEN
)
.
appendLine
(
"背景色"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendLine
(
"行高顶部对齐"
).
setLineHeight
(
2
*
lineHeight
,
SpanUtils
.
ALIGN_TOP
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendLine
(
"行高居中对齐"
).
setLineHeight
(
2
*
lineHeight
,
SpanUtils
.
ALIGN_CENTER
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendLine
(
"行高底部对齐"
).
setLineHeight
(
2
*
lineHeight
,
SpanUtils
.
ALIGN_BOTTOM
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendLine
(
"测试段落缩,首行缩进两字,其他行不缩进"
).
setLeadingMargin
((
int
)
textSize
*
2
,
10
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendLine
(
"测试引用,后面的字是为了凑到两行的效果"
).
setQuoteColor
(
Color
.
GREEN
,
10
,
10
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendLine
(
"测试列表项,后面的字是为了凑到两行的效果"
).
setBullet
(
Color
.
GREEN
,
20
,
10
).
setBackgroundColor
(
Color
.
LTGRAY
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendLine
(
"测试图标文字顶部对齐,后面的字是为了凑到两行的效果"
).
setIconMargin
(
R
.
drawable
.
shape_spannable_block_high
,
20
,
SpanUtils
.
ALIGN_TOP
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendLine
(
"测试图标文字居中对齐,后面的字是为了凑到两行的效果"
).
setIconMargin
(
R
.
drawable
.
shape_spannable_block_high
,
20
,
SpanUtils
.
ALIGN_CENTER
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendLine
(
"测试图标文字底部对齐,后面的字是为了凑到两行的效果"
).
setIconMargin
(
R
.
drawable
.
shape_spannable_block_high
,
20
,
SpanUtils
.
ALIGN_BOTTOM
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendLine
(
"测试图标顶部对齐,后面的字是为了凑到两行的效果"
).
setIconMargin
(
R
.
drawable
.
shape_spannable_block_low
,
20
,
SpanUtils
.
ALIGN_TOP
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendLine
(
"测试图标居中对齐,后面的字是为了凑到两行的效果"
).
setIconMargin
(
R
.
drawable
.
shape_spannable_block_low
,
20
,
SpanUtils
.
ALIGN_CENTER
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendLine
(
"测试图标底部对齐,后面的字是为了凑到两行的效果"
).
setIconMargin
(
R
.
drawable
.
shape_spannable_block_low
,
20
,
SpanUtils
.
ALIGN_BOTTOM
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendLine
(
"32dp字体"
).
setFontSize
(
32
,
true
)
.
appendLine
(
"2倍字体"
).
setFontProportion
(
2
)
.
appendLine
(
"横向2倍字体"
).
setFontXProportion
(
1.5f
)
.
appendLine
(
"删除线"
).
setStrikethrough
()
.
appendLine
(
"下划线"
).
setUnderline
()
.
append
(
"测试"
).
appendLine
(
"上标"
).
setSuperscript
()
.
append
(
"测试"
).
appendLine
(
"下标"
).
setSubscript
()
.
appendLine
(
"粗体"
).
setBold
()
.
appendLine
(
"斜体"
).
setItalic
()
.
appendLine
(
"粗斜体"
).
setBoldItalic
()
.
appendLine
(
"monospace字体"
).
setFontFamily
(
"monospace"
)
.
appendLine
(
"自定义字体"
).
setTypeface
(
Typeface
.
createFromAsset
(
getAssets
(),
"fonts/dnmbhs.ttf"
))
.
appendLine
(
"相反对齐"
).
setAlign
(
Layout
.
Alignment
.
ALIGN_OPPOSITE
)
.
appendLine
(
"居中对齐"
).
setAlign
(
Layout
.
Alignment
.
ALIGN_CENTER
)
.
appendLine
(
"正常对齐"
).
setAlign
(
Layout
.
Alignment
.
ALIGN_NORMAL
)
.
append
(
"测试"
).
appendLine
(
"点击事件"
).
setClickSpan
(
clickableSpan
)
.
append
(
"测试"
).
appendLine
(
"Url"
).
setUrl
(
"https://github.com/Blankj/AndroidUtilCode"
)
.
append
(
"测试"
).
appendLine
(
"模糊"
).
setBlur
(
3
,
BlurMaskFilter
.
Blur
.
NORMAL
)
.
appendLine
(
"颜色渐变"
).
setShader
(
new
LinearGradient
(
0
,
0
,
64
*
density
*
4
,
0
,
getResources
().
getIntArray
(
R
.
array
.
rainbow
),
null
,
Shader
.
TileMode
.
REPEAT
)).
setFontSize
(
64
,
true
)
.
appendLine
(
"图片着色"
).
setFontSize
(
64
,
true
).
setShader
(
new
BitmapShader
(
ImageUtils
.
getBitmap
(
R
.
drawable
.
cheetah
),
Shader
.
TileMode
.
REPEAT
,
Shader
.
TileMode
.
REPEAT
))
.
appendLine
(
"阴影效果"
).
setFontSize
(
64
,
true
).
setBackgroundColor
(
Color
.
BLACK
).
setShadow
(
24
,
8
,
8
,
Color
.
WHITE
)
.
append
(
"测试小图对齐"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendImage
(
R
.
drawable
.
shape_spannable_block_low
,
SpanUtils
.
ALIGN_TOP
)
.
appendImage
(
R
.
drawable
.
shape_spannable_block_low
,
SpanUtils
.
ALIGN_CENTER
)
.
appendImage
(
R
.
drawable
.
shape_spannable_block_low
,
SpanUtils
.
ALIGN_BASELINE
)
.
appendImage
(
R
.
drawable
.
shape_spannable_block_low
,
SpanUtils
.
ALIGN_BOTTOM
)
.
appendLine
(
"end"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
append
(
"测试大图字体顶部对齐"
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendImage
(
R
.
drawable
.
shape_spannable_block_high
,
SpanUtils
.
ALIGN_TOP
)
.
appendLine
()
.
append
(
"测试大图字体居中对齐"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendImage
(
R
.
drawable
.
shape_spannable_block_high
,
SpanUtils
.
ALIGN_CENTER
)
.
appendLine
()
.
append
(
"测试大图字体底部对齐"
).
setBackgroundColor
(
Color
.
GREEN
)
.
appendImage
(
R
.
drawable
.
shape_spannable_block_high
,
SpanUtils
.
ALIGN_BOTTOM
)
.
appendLine
()
.
append
(
"测试空格"
).
appendSpace
(
30
,
Color
.
LTGRAY
).
appendSpace
(
50
,
Color
.
GREEN
).
appendSpace
(
100
).
appendSpace
(
30
,
Color
.
LTGRAY
).
appendSpace
(
50
,
Color
.
GREEN
)
.
create
());
initAnimSpan
();
startAnim
();
}
private
void
initAnimSpan
()
{
mShaderWidth
=
64
*
density
*
4
;
mShader
=
new
LinearGradient
(
0
,
0
,
mShaderWidth
,
0
,
getResources
().
getIntArray
(
R
.
array
.
rainbow
),
null
,
Shader
.
TileMode
.
REPEAT
);
matrix
=
new
Matrix
();
mBlurMaskFilterSpan
=
new
BlurMaskFilterSpan
(
25
);
mShadowSpan
=
new
ShadowSpan
(
8
,
8
,
8
,
Color
.
WHITE
);
mForegroundAlphaColorSpan
=
new
ForegroundAlphaColorSpan
(
Color
.
TRANSPARENT
);
mForegroundAlphaColorSpanGroup
=
new
ForegroundAlphaColorSpanGroup
(
0
);
mPrinterString
=
"打印动画,后面的文字是为了测试打印效果..."
;
mSpanUtils
=
new
SpanUtils
()
.
appendLine
(
"彩虹动画"
).
setFontSize
(
64
,
true
).
setShader
(
mShader
)
.
appendLine
(
"模糊动画"
).
setFontSize
(
64
,
true
).
setSpans
(
mBlurMaskFilterSpan
)
.
appendLine
(
"阴影动画"
).
setFontSize
(
64
,
true
).
setBackgroundColor
(
Color
.
BLACK
).
setSpans
(
mShadowSpan
)
.
appendLine
(
"透明动画"
).
setFontSize
(
64
,
true
).
setSpans
(
mForegroundAlphaColorSpan
);
for
(
int
i
=
0
,
len
=
mPrinterString
.
length
();
i
<
len
;
++
i
)
{
ForegroundAlphaColorSpan
span
=
new
ForegroundAlphaColorSpan
(
Color
.
TRANSPARENT
);
mSpanUtils
.
append
(
mPrinterString
.
substring
(
i
,
i
+
1
)).
setSpans
(
span
);
mForegroundAlphaColorSpanGroup
.
addSpan
(
span
);
}
animSsb
=
mSpanUtils
.
create
();
}
private
void
startAnim
()
{
valueAnimator
=
ValueAnimator
.
ofFloat
(
0
,
1
);
valueAnimator
.
addUpdateListener
(
new
ValueAnimator
.
AnimatorUpdateListener
()
{
@Override
public
void
onAnimationUpdate
(
ValueAnimator
animation
)
{
// shader
matrix
.
reset
();
matrix
.
setTranslate
((
Float
)
animation
.
getAnimatedValue
()
*
mShaderWidth
,
0
);
mShader
.
setLocalMatrix
(
matrix
);
// blur
mBlurMaskFilterSpan
.
setRadius
(
25
*
(
1.00001f
-
(
Float
)
animation
.
getAnimatedValue
()));
// shadow
mShadowSpan
.
setDx
(
16
*
(
0.5f
-
(
Float
)
animation
.
getAnimatedValue
()));
mShadowSpan
.
setDy
(
16
*
(
0.5f
-
(
Float
)
animation
.
getAnimatedValue
()));
// alpha
mForegroundAlphaColorSpan
.
setAlpha
((
int
)
(
255
*
(
Float
)
animation
.
getAnimatedValue
()));
// printer
mForegroundAlphaColorSpanGroup
.
setAlpha
((
Float
)
animation
.
getAnimatedValue
());
// update
tvAboutAnimRainbow
.
setText
(
animSsb
);
}
});
valueAnimator
.
setInterpolator
(
new
LinearInterpolator
());
valueAnimator
.
setDuration
(
600
*
3
);
valueAnimator
.
setRepeatCount
(
ValueAnimator
.
INFINITE
);
valueAnimator
.
start
();
}
@Override
public
void
doBusiness
(
Context
context
)
{
}
@Override
public
void
onWidgetClick
(
View
view
)
{
}
@Override
protected
void
onDestroy
()
{
valueAnimator
.
cancel
();
super
.
onDestroy
();
}
}
app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java
已删除
100644 → 0
浏览文件 @
44bd2efd
package
com.blankj.androidutilcode.activity
;
import
android.content.Context
;
import
android.graphics.BlurMaskFilter
;
import
android.graphics.Color
;
import
android.graphics.Typeface
;
import
android.os.Bundle
;
import
android.text.Layout
;
import
android.text.TextPaint
;
import
android.text.method.LinkMovementMethod
;
import
android.text.style.ClickableSpan
;
import
android.view.View
;
import
android.widget.TextView
;
import
com.blankj.androidutilcode.R
;
import
com.blankj.androidutilcode.base.BaseActivity
;
import
com.blankj.utilcode.util.SpannableStringUtils
;
import
com.blankj.utilcode.util.ToastUtils
;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2016/09/27
* desc : SpannableString工具类Demo
* </pre>
*/
public
class
SpannableActivity
extends
BaseActivity
{
@Override
public
void
initData
(
Bundle
bundle
)
{
}
@Override
public
int
bindLayout
()
{
return
R
.
layout
.
activity_spannable
;
}
@Override
public
void
initView
(
Bundle
savedInstanceState
,
View
view
)
{
ClickableSpan
clickableSpan
=
new
ClickableSpan
()
{
@Override
public
void
onClick
(
View
widget
)
{
ToastUtils
.
showShort
(
"事件触发了"
);
}
@Override
public
void
updateDrawState
(
TextPaint
ds
)
{
ds
.
setColor
(
Color
.
BLUE
);
ds
.
setUnderlineText
(
false
);
}
};
TextView
tvAboutSpannable
=
(
TextView
)
findViewById
(
R
.
id
.
tv_about_spannable
);
// 响应点击事件的话必须设置以下属性
tvAboutSpannable
.
setMovementMethod
(
LinkMovementMethod
.
getInstance
());
tvAboutSpannable
.
setText
(
new
SpannableStringUtils
.
Builder
()
.
appendLine
(
"测试SpannableStringUtils"
).
setBackgroundColor
(
Color
.
LTGRAY
).
setBold
().
setForegroundColor
(
Color
.
YELLOW
).
setAlign
(
Layout
.
Alignment
.
ALIGN_CENTER
)
.
append
(
"测试"
)
.
append
(
"前景色"
).
setForegroundColor
(
Color
.
GREEN
)
.
appendLine
(
"背景色"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
appendLine
(
"测试首行缩进"
).
setLeadingMargin
(
30
,
50
)
.
appendLine
(
"测试引用"
).
setQuoteColor
(
Color
.
BLUE
,
10
,
10
)
.
appendLine
(
"测试列表项"
).
setBullet
(
Color
.
GREEN
,
30
,
10
)
.
appendLine
(
"测试32dp字体"
).
setFontSize
(
36
,
true
)
.
append
(
"测试"
)
.
appendLine
(
"2倍字体"
).
setFontProportion
(
2
)
.
append
(
"测试"
)
.
appendLine
(
"横向2倍字体"
).
setFontXProportion
(
2
)
.
append
(
"测试"
)
.
append
(
"删除线"
).
setStrikethrough
()
.
appendLine
(
"下划线"
).
setUnderline
()
.
append
(
"测试"
)
.
append
(
"上标"
).
setSuperscript
()
.
appendLine
(
"下标"
).
setSubscript
()
.
append
(
"测试"
)
.
append
(
"粗体"
).
setBold
()
.
append
(
"斜体"
).
setItalic
()
.
appendLine
(
"粗斜体"
).
setBoldItalic
()
.
appendLine
(
"monospace font"
).
setFontFamily
(
"monospace"
)
.
appendLine
(
"测试自定义字体"
).
setTypeface
(
Typeface
.
createFromAsset
(
getAssets
(),
"fonts/dnmbhs.ttf"
))
.
appendLine
(
"测试相反对齐"
).
setAlign
(
Layout
.
Alignment
.
ALIGN_OPPOSITE
)
.
appendLine
(
"测试居中对齐"
).
setAlign
(
Layout
.
Alignment
.
ALIGN_CENTER
)
.
appendLine
(
"测试正常对齐"
).
setAlign
(
Layout
.
Alignment
.
ALIGN_NORMAL
)
.
append
(
"测试小图对齐"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
append
(
""
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_low
,
SpannableStringUtils
.
ALIGN_TOP
)
.
append
(
""
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_low
,
SpannableStringUtils
.
ALIGN_CENTER
)
.
append
(
""
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_low
,
SpannableStringUtils
.
ALIGN_BASELINE
)
.
append
(
""
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_low
,
SpannableStringUtils
.
ALIGN_BOTTOM
)
.
appendLine
(
"end"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
append
(
"测试顶部对齐"
).
setBackgroundColor
(
Color
.
GREEN
)
.
append
(
"image"
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_high
,
SpannableStringUtils
.
ALIGN_TOP
)
.
appendLine
(
"end"
).
setBackgroundColor
(
Color
.
GREEN
)
.
append
(
"居中对齐"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
append
(
""
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_high
,
SpannableStringUtils
.
ALIGN_CENTER
)
.
appendLine
(
"end"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
append
(
"Baseline对齐"
).
setBackgroundColor
(
Color
.
GREEN
)
.
append
(
""
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_high
,
SpannableStringUtils
.
ALIGN_BASELINE
)
.
appendLine
(
"end"
).
setBackgroundColor
(
Color
.
GREEN
)
.
append
(
"底部对齐"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
append
(
""
).
setResourceId
(
R
.
drawable
.
shape_spannable_block_high
,
SpannableStringUtils
.
ALIGN_BOTTOM
)
.
appendLine
(
"end"
).
setBackgroundColor
(
Color
.
LTGRAY
)
.
append
(
"测试"
)
.
appendLine
(
"点击事件"
).
setClickSpan
(
clickableSpan
)
.
append
(
"测试"
)
.
appendLine
(
"Url"
).
setUrl
(
"https://github.com/Blankj/AndroidUtilCode"
)
.
append
(
"测试"
)
.
append
(
"模糊"
).
setBlur
(
3
,
BlurMaskFilter
.
Blur
.
NORMAL
)
.
create
()
);
}
@Override
public
void
doBusiness
(
Context
context
)
{
}
@Override
public
void
onWidgetClick
(
View
view
)
{
}
}
app/src/main/java/com/blankj/androidutilcode/activity/ToastActivity.java
浏览文件 @
968e844a
...
...
@@ -20,8 +20,8 @@ import com.blankj.utilcode.util.ToastUtils;
*/
public
class
ToastActivity
extends
BaseActivity
{
private
boolean
isDefaultLocation
;
private
boolean
isDefaultView
;
private
boolean
isDefaultLocation
;
private
boolean
isDefaultView
;
private
TextView
tvAboutToast
;
@Override
...
...
@@ -108,6 +108,7 @@ public class ToastActivity extends BaseActivity {
@Override
protected
void
onDestroy
()
{
ToastUtils
.
setView
(
null
);
ToastUtils
.
setGravity
(
Gravity
.
BOTTOM
|
Gravity
.
CENTER_HORIZONTAL
,
0
,
getResources
().
getDimensionPixelSize
(
R
.
dimen
.
offset_64
));
super
.
onDestroy
();
}
}
app/src/main/java/com/blankj/androidutilcode/span/BlurMaskFilterSpan.java
0 → 100644
浏览文件 @
968e844a
package
com.blankj.androidutilcode.span
;
import
android.graphics.BlurMaskFilter
;
import
android.graphics.MaskFilter
;
import
android.text.TextPaint
;
import
android.text.style.CharacterStyle
;
import
android.text.style.UpdateAppearance
;
public
class
BlurMaskFilterSpan
extends
CharacterStyle
implements
UpdateAppearance
{
private
static
final
String
TAG
=
"MutableBlurMaskFilterSpan"
;
private
float
mRadius
;
private
MaskFilter
mFilter
;
public
BlurMaskFilterSpan
(
float
radius
)
{
mRadius
=
radius
;
}
public
void
setRadius
(
float
radius
)
{
mRadius
=
radius
;
mFilter
=
new
BlurMaskFilter
(
mRadius
,
BlurMaskFilter
.
Blur
.
NORMAL
);
}
public
float
getRadius
()
{
return
mRadius
;
}
@Override
public
void
updateDrawState
(
TextPaint
ds
)
{
ds
.
setMaskFilter
(
mFilter
);
}
}
\ No newline at end of file
app/src/main/java/com/blankj/androidutilcode/span/ForegroundAlphaColorSpan.java
0 → 100644
浏览文件 @
968e844a
package
com.blankj.androidutilcode.span
;
import
android.graphics.Color
;
import
android.support.annotation.ColorInt
;
import
android.text.TextPaint
;
import
android.text.style.CharacterStyle
;
import
android.text.style.UpdateAppearance
;
public
class
ForegroundAlphaColorSpan
extends
CharacterStyle
implements
UpdateAppearance
{
private
int
mColor
;
public
ForegroundAlphaColorSpan
(
@ColorInt
int
color
)
{
mColor
=
color
;
}
public
void
setAlpha
(
int
alpha
)
{
mColor
=
Color
.
argb
(
alpha
,
Color
.
red
(
mColor
),
Color
.
green
(
mColor
),
Color
.
blue
(
mColor
));
}
@Override
public
void
updateDrawState
(
TextPaint
ds
)
{
ds
.
setColor
(
mColor
);
}
}
app/src/main/java/com/blankj/androidutilcode/span/ForegroundAlphaColorSpanGroup.java
0 → 100644
浏览文件 @
968e844a
package
com.blankj.androidutilcode.span
;
import
java.util.ArrayList
;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2017/06/11
* desc :
* </pre>
*/
public
class
ForegroundAlphaColorSpanGroup
{
private
final
float
mAlpha
;
private
final
ArrayList
<
ForegroundAlphaColorSpan
>
mSpans
;
public
ForegroundAlphaColorSpanGroup
(
float
alpha
)
{
mAlpha
=
alpha
;
mSpans
=
new
ArrayList
<>();
}
public
void
addSpan
(
ForegroundAlphaColorSpan
span
)
{
span
.
setAlpha
((
int
)
(
mAlpha
*
255
));
mSpans
.
add
(
span
);
}
public
void
setAlpha
(
float
alpha
)
{
int
size
=
mSpans
.
size
();
float
total
=
1.0f
*
size
*
alpha
;
for
(
int
index
=
0
;
index
<
size
;
index
++)
{
ForegroundAlphaColorSpan
span
=
mSpans
.
get
(
index
);
if
(
total
>=
1.0f
)
{
span
.
setAlpha
(
255
);
total
-=
1.0f
;
}
else
{
span
.
setAlpha
((
int
)
(
total
*
255
));
total
=
0.0f
;
}
}
}
public
float
getAlpha
()
{
return
mAlpha
;
}
}
app/src/main/java/com/blankj/androidutilcode/span/ShadowSpan.java
0 → 100644
浏览文件 @
968e844a
package
com.blankj.androidutilcode.span
;
import
android.text.TextPaint
;
import
android.text.style.CharacterStyle
;
import
android.text.style.UpdateAppearance
;
public
class
ShadowSpan
extends
CharacterStyle
implements
UpdateAppearance
{
private
float
radius
;
private
float
dx
;
private
float
dy
;
private
int
shadowColor
;
public
ShadowSpan
(
float
radius
,
float
dx
,
float
dy
,
int
shadowColor
)
{
this
.
radius
=
radius
;
this
.
dx
=
dx
;
this
.
dy
=
dy
;
this
.
shadowColor
=
shadowColor
;
}
public
float
getDx
()
{
return
dx
;
}
public
void
setDx
(
float
dx
)
{
this
.
dx
=
dx
;
}
public
float
getDy
()
{
return
dy
;
}
public
void
setDy
(
float
dy
)
{
this
.
dy
=
dy
;
}
@Override
public
void
updateDrawState
(
TextPaint
tp
)
{
tp
.
setShadowLayer
(
radius
,
dx
,
dy
,
shadowColor
);
}
}
\ No newline at end of file
app/src/main/res/drawable/cheetah.png
0 → 100755
浏览文件 @
968e844a
36.1 KB
app/src/main/res/drawable/shape_
toast_bg
.xml
→
app/src/main/res/drawable/shape_
round_rect
.xml
浏览文件 @
968e844a
文件已移动
app/src/main/res/layout/activity_span
nable
.xml
→
app/src/main/res/layout/activity_span.xml
浏览文件 @
968e844a
...
...
@@ -12,7 +12,14 @@
android:padding=
"@dimen/spacing_16"
>
<TextView
android:id=
"@+id/tv_about_spannable"
android:id=
"@+id/tv_about_anim_span"
style=
"@style/TextStyle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layerType=
"software"
/>
<TextView
android:id=
"@+id/tv_about_span"
style=
"@style/TextStyle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
...
...
app/src/main/res/layout/snackbar_add.xml
已删除
100644 → 0
浏览文件 @
44bd2efd
<?xml version="1.0" encoding="utf-8"?>
<ImageView
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:src=
"@mipmap/ic_launcher"
/>
\ No newline at end of file
app/src/main/res/layout/snackbar_custom.xml
浏览文件 @
968e844a
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"
wrap_cont
ent"
android:layout_width=
"
match_par
ent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:background=
"@drawable/shape_
toast_bg
"
android:background=
"@drawable/shape_
round_rect
"
android:drawableLeft=
"@mipmap/ic_launcher"
android:drawablePadding=
"@dimen/spacing_16"
android:gravity=
"center"
...
...
app/src/main/res/layout/toast_custom.xml
浏览文件 @
968e844a
...
...
@@ -4,7 +4,7 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:background=
"@drawable/shape_
toast_bg
"
android:background=
"@drawable/shape_
round_rect
"
android:drawableLeft=
"@mipmap/ic_launcher"
android:drawablePadding=
"@dimen/spacing_16"
android:gravity=
"center"
...
...
app/src/main/res/values/colors.xml
浏览文件 @
968e844a
...
...
@@ -6,4 +6,18 @@
<color
name=
"white"
>
#FFFFFF
</color>
<color
name=
"black"
>
#000000
</color>
<color
name=
"rainbow_red"
>
#bf0c43
</color>
<color
name=
"rainbow_yellow"
>
#f9ba15
</color>
<color
name=
"rainbow_green"
>
#8eac00
</color>
<color
name=
"rainbow_blue"
>
#127a97
</color>
<color
name=
"rainbow_purple"
>
#452b72
</color>
<integer-array
name=
"rainbow"
>
<item>
@color/rainbow_red
</item>
<item>
@color/rainbow_yellow
</item>
<item>
@color/rainbow_green
</item>
<item>
@color/rainbow_blue
</item>
<item>
@color/rainbow_purple
</item>
</integer-array>
</resources>
app/src/main/res/values/dimens.xml
浏览文件 @
968e844a
...
...
@@ -6,7 +6,7 @@
<dimen
name=
"block_low_width"
>
40dp
</dimen>
<dimen
name=
"block_low_height"
>
8dp
</dimen>
<dimen
name=
"block_high_width"
>
20dp
</dimen>
<dimen
name=
"block_high_height"
>
60
dp
</dimen>
<dimen
name=
"block_high_height"
>
96
dp
</dimen>
<dimen
name=
"offset_64"
>
64dp
</dimen>
</resources>
update_log.md
浏览文件 @
968e844a
*
17/06/11 SpanUtils完工,发布版本1.7.0
*
17/06/08 SpanUtils即将完工
*
17/06/07 SpannableStringUtils改名为SpanUtils,即将完工
*
17/06/06 优化SpannableStringUtils
...
...
utilcode/build.gradle
浏览文件 @
968e844a
...
...
@@ -22,18 +22,17 @@ task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'crea
android
{
compileSdkVersion
25
buildToolsVersion
"25.0.
2
"
buildToolsVersion
"25.0.
3
"
defaultConfig
{
minSdkVersion
15
versionCode
36
versionName
"1.
6.4
"
versionCode
40
versionName
"1.
7.0
"
}
buildTypes
{
debug
{
testCoverageEnabled
true
minifyEnabled
true
proguardFiles
getDefaultProguardFile
(
'proguard-android.txt'
),
'proguard-rules.pro'
}
release
{
...
...
utilcode/src/main/java/com/blankj/utilcode/util/CacheUtils.java
浏览文件 @
968e844a
...
...
@@ -3,6 +3,7 @@ package com.blankj.utilcode.util;
import
android.graphics.Bitmap
;
import
android.graphics.BitmapFactory
;
import
android.graphics.Canvas
;
import
android.graphics.PixelFormat
;
import
android.graphics.drawable.BitmapDrawable
;
import
android.graphics.drawable.Drawable
;
import
android.os.Parcel
;
...
...
@@ -146,7 +147,7 @@ public class CacheUtils {
}
///////////////////////////////////////////////////////////////////////////
// byte 读写
// byte
s
读写
///////////////////////////////////////////////////////////////////////////
/**
...
...
@@ -916,22 +917,23 @@ public class CacheUtils {
}
private
static
Drawable
bytes2Drawable
(
byte
[]
bytes
)
{
return
bytes
==
null
?
null
:
B
itmap2Drawable
(
bytes2Bitmap
(
bytes
));
return
bytes
==
null
?
null
:
b
itmap2Drawable
(
bytes2Bitmap
(
bytes
));
}
private
static
Bitmap
drawable2Bitmap
(
Drawable
drawable
)
{
if
(
drawable
==
null
)
return
null
;
if
(
drawable
instanceof
BitmapDrawable
)
{
BitmapDrawable
B
itmapDrawable
=
(
BitmapDrawable
)
drawable
;
if
(
B
itmapDrawable
.
getBitmap
()
!=
null
)
{
return
B
itmapDrawable
.
getBitmap
();
BitmapDrawable
b
itmapDrawable
=
(
BitmapDrawable
)
drawable
;
if
(
b
itmapDrawable
.
getBitmap
()
!=
null
)
{
return
b
itmapDrawable
.
getBitmap
();
}
}
Bitmap
bitmap
;
if
(
drawable
.
getIntrinsicWidth
()
<=
0
||
drawable
.
getIntrinsicHeight
()
<=
0
)
{
bitmap
=
Bitmap
.
createBitmap
(
1
,
1
,
Bitmap
.
Config
.
ARGB_8888
);
bitmap
=
Bitmap
.
createBitmap
(
1
,
1
,
drawable
.
getOpacity
()
!=
PixelFormat
.
OPAQUE
?
Bitmap
.
Config
.
ARGB_8888
:
Bitmap
.
Config
.
RGB_565
);
}
else
{
bitmap
=
Bitmap
.
createBitmap
(
drawable
.
getIntrinsicWidth
(),
drawable
.
getIntrinsicHeight
(),
Bitmap
.
Config
.
ARGB_8888
);
bitmap
=
Bitmap
.
createBitmap
(
drawable
.
getIntrinsicWidth
(),
drawable
.
getIntrinsicHeight
(),
drawable
.
getOpacity
()
!=
PixelFormat
.
OPAQUE
?
Bitmap
.
Config
.
ARGB_8888
:
Bitmap
.
Config
.
RGB_565
);
}
Canvas
canvas
=
new
Canvas
(
bitmap
);
drawable
.
setBounds
(
0
,
0
,
canvas
.
getWidth
(),
canvas
.
getHeight
());
...
...
@@ -939,8 +941,8 @@ public class CacheUtils {
return
bitmap
;
}
private
static
Drawable
Bitmap2Drawable
(
Bitmap
B
itmap
)
{
return
Bitmap
==
null
?
null
:
new
BitmapDrawable
(
Utils
.
getContext
().
getResources
(),
B
itmap
);
private
static
Drawable
bitmap2Drawable
(
Bitmap
b
itmap
)
{
return
bitmap
==
null
?
null
:
new
BitmapDrawable
(
Utils
.
getContext
().
getResources
(),
b
itmap
);
}
}
...
...
utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java
浏览文件 @
968e844a
...
...
@@ -5,6 +5,7 @@ import android.graphics.Bitmap;
import
android.graphics.BitmapFactory
;
import
android.graphics.Canvas
;
import
android.graphics.Color
;
import
android.graphics.PixelFormat
;
import
android.graphics.drawable.BitmapDrawable
;
import
android.graphics.drawable.Drawable
;
import
android.view.View
;
...
...
@@ -486,15 +487,17 @@ public final class ConvertUtils {
public
static
Bitmap
drawable2Bitmap
(
Drawable
drawable
)
{
if
(
drawable
instanceof
BitmapDrawable
)
{
BitmapDrawable
bitmapDrawable
=
(
BitmapDrawable
)
drawable
;
if
(
bitmapDrawable
.
getBitmap
()
!=
null
)
{
if
(
bitmapDrawable
.
getBitmap
()
!=
null
)
{
return
bitmapDrawable
.
getBitmap
();
}
}
Bitmap
bitmap
;
if
(
drawable
.
getIntrinsicWidth
()
<=
0
||
drawable
.
getIntrinsicHeight
()
<=
0
)
{
bitmap
=
Bitmap
.
createBitmap
(
1
,
1
,
Bitmap
.
Config
.
ARGB_8888
);
if
(
drawable
.
getIntrinsicWidth
()
<=
0
||
drawable
.
getIntrinsicHeight
()
<=
0
)
{
bitmap
=
Bitmap
.
createBitmap
(
1
,
1
,
drawable
.
getOpacity
()
!=
PixelFormat
.
OPAQUE
?
Bitmap
.
Config
.
ARGB_8888
:
Bitmap
.
Config
.
RGB_565
);
}
else
{
bitmap
=
Bitmap
.
createBitmap
(
drawable
.
getIntrinsicWidth
(),
drawable
.
getIntrinsicHeight
(),
Bitmap
.
Config
.
ARGB_8888
);
bitmap
=
Bitmap
.
createBitmap
(
drawable
.
getIntrinsicWidth
(),
drawable
.
getIntrinsicHeight
(),
drawable
.
getOpacity
()
!=
PixelFormat
.
OPAQUE
?
Bitmap
.
Config
.
ARGB_8888
:
Bitmap
.
Config
.
RGB_565
);
}
Canvas
canvas
=
new
Canvas
(
bitmap
);
drawable
.
setBounds
(
0
,
0
,
canvas
.
getWidth
(),
canvas
.
getHeight
());
...
...
utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
浏览文件 @
968e844a
...
...
@@ -30,17 +30,18 @@ public final class FragmentUtils {
throw
new
UnsupportedOperationException
(
"u can't instantiate me..."
);
}
private
static
final
int
TYPE_ADD_FRAGMENT
=
0x01
;
private
static
final
int
TYPE_REMOVE_FRAGMENT
=
0x01
<<
1
;
private
static
final
int
TYPE_REMOVE_TO_FRAGMENT
=
0x01
<<
2
;
private
static
final
int
TYPE_REPLACE_FRAGMENT
=
0x01
<<
3
;
private
static
final
int
TYPE_POP_ADD_FRAGMENT
=
0x01
<<
4
;
private
static
final
int
TYPE_HIDE_FRAGMENT
=
0x01
<<
5
;
private
static
final
int
TYPE_SHOW_FRAGMENT
=
0x01
<<
6
;
private
static
final
int
TYPE_HIDE_SHOW_FRAGMENT
=
0x01
<<
7
;
private
static
final
String
ARGS_ID
=
"args_id"
;
private
static
final
String
ARGS_IS_HIDE
=
"args_is_hide"
;
private
static
final
int
TYPE_ADD_FRAGMENT
=
0x01
;
private
static
final
int
TYPE_HIDE_ADD_FRAGMENT
=
0x01
<<
1
;
private
static
final
int
TYPE_REMOVE_FRAGMENT
=
0x01
<<
2
;
private
static
final
int
TYPE_REMOVE_TO_FRAGMENT
=
0x01
<<
3
;
private
static
final
int
TYPE_REPLACE_FRAGMENT
=
0x01
<<
4
;
private
static
final
int
TYPE_POP_ADD_FRAGMENT
=
0x01
<<
5
;
private
static
final
int
TYPE_HIDE_FRAGMENT
=
0x01
<<
6
;
private
static
final
int
TYPE_SHOW_FRAGMENT
=
0x01
<<
7
;
private
static
final
int
TYPE_HIDE_SHOW_FRAGMENT
=
0x01
<<
8
;
private
static
final
String
ARGS_ID
=
"args_id"
;
private
static
final
String
ARGS_IS_HIDE
=
"args_is_hide"
;
private
static
final
String
ARGS_IS_ADD_STACK
=
"args_is_add_stack"
;
/**
...
...
@@ -131,7 +132,7 @@ public final class FragmentUtils {
boolean
isAddStack
,
SharedElement
...
sharedElement
)
{
putArgs
(
addFragment
,
new
Args
(
containerId
,
isHide
,
isAddStack
));
return
operateFragment
(
fragmentManager
,
hideFragment
,
addFragment
,
TYPE_ADD_FRAGMENT
,
sharedElement
);
return
operateFragment
(
fragmentManager
,
hideFragment
,
addFragment
,
TYPE_
HIDE_
ADD_FRAGMENT
,
sharedElement
);
}
/**
...
...
@@ -522,11 +523,17 @@ public final class FragmentUtils {
}
}
switch
(
type
)
{
case
TYPE_HIDE_ADD_FRAGMENT:
ft
.
hide
(
srcFragment
);
case
TYPE_ADD_FRAGMENT:
if
(
srcFragment
!=
null
)
ft
.
hide
(
srcFragment
);
ft
.
add
(
args
.
getInt
(
ARGS_ID
),
destFragment
,
name
);
if
(
args
.
getBoolean
(
ARGS_IS_HIDE
))
ft
.
hide
(
destFragment
);
if
(
args
.
getBoolean
(
ARGS_IS_ADD_STACK
))
ft
.
addToBackStack
(
name
);
Fragment
fragmentByTag
=
fragmentManager
.
findFragmentByTag
(
name
);
if
(
fragmentByTag
!=
null
)
{
destFragment
=
fragmentByTag
;
}
else
{
ft
.
add
(
args
.
getInt
(
ARGS_ID
),
destFragment
,
name
);
if
(
args
.
getBoolean
(
ARGS_IS_HIDE
))
ft
.
hide
(
destFragment
);
if
(
args
.
getBoolean
(
ARGS_IS_ADD_STACK
))
ft
.
addToBackStack
(
name
);
}
break
;
case
TYPE_REMOVE_FRAGMENT:
ft
.
remove
(
destFragment
);
...
...
@@ -872,7 +879,7 @@ public final class FragmentUtils {
}
static
class
Args
{
int
id
;
int
id
;
boolean
isHide
;
boolean
isAddStack
;
...
...
@@ -884,7 +891,7 @@ public final class FragmentUtils {
}
public
static
class
SharedElement
{
View
sharedElement
;
View
sharedElement
;
String
name
;
public
SharedElement
(
View
sharedElement
,
String
name
)
{
...
...
@@ -894,7 +901,7 @@ public final class FragmentUtils {
}
static
class
FragmentNode
{
Fragment
fragment
;
Fragment
fragment
;
List
<
FragmentNode
>
next
;
public
FragmentNode
(
Fragment
fragment
,
List
<
FragmentNode
>
next
)
{
...
...
utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java
浏览文件 @
968e844a
package
com.blankj.utilcode.util
;
import
android.annotation.TargetApi
;
import
android.content.res.Resources
;
import
android.graphics.Bitmap
;
import
android.graphics.Bitmap.CompressFormat
;
import
android.graphics.BitmapFactory
;
...
...
@@ -21,7 +20,6 @@ import android.graphics.RectF;
import
android.graphics.Shader
;
import
android.graphics.drawable.BitmapDrawable
;
import
android.graphics.drawable.Drawable
;
import
android.graphics.drawable.NinePatchDrawable
;
import
android.media.ExifInterface
;
import
android.os.Build
;
import
android.renderscript.Allocation
;
...
...
@@ -90,30 +88,33 @@ public final class ImageUtils {
*/
public
static
Bitmap
drawable2Bitmap
(
Drawable
drawable
)
{
if
(
drawable
instanceof
BitmapDrawable
)
{
return
((
BitmapDrawable
)
drawable
).
getBitmap
();
}
else
if
(
drawable
instanceof
NinePatchDrawable
)
{
Bitmap
bitmap
=
Bitmap
.
createBitmap
(
drawable
.
getIntrinsicWidth
(),
drawable
.
getIntrinsicHeight
(),
BitmapDrawable
bitmapDrawable
=
(
BitmapDrawable
)
drawable
;
if
(
bitmapDrawable
.
getBitmap
()
!=
null
)
{
return
bitmapDrawable
.
getBitmap
();
}
}
Bitmap
bitmap
;
if
(
drawable
.
getIntrinsicWidth
()
<=
0
||
drawable
.
getIntrinsicHeight
()
<=
0
)
{
bitmap
=
Bitmap
.
createBitmap
(
1
,
1
,
drawable
.
getOpacity
()
!=
PixelFormat
.
OPAQUE
?
Bitmap
.
Config
.
ARGB_8888
:
Bitmap
.
Config
.
RGB_565
);
Canvas
canvas
=
new
Canvas
(
bitmap
);
drawable
.
setBounds
(
0
,
0
,
drawable
.
getIntrinsicWidth
(),
drawable
.
getIntrinsicHeight
());
drawable
.
draw
(
canvas
);
return
bitmap
;
}
else
{
return
null
;
bitmap
=
Bitmap
.
createBitmap
(
drawable
.
getIntrinsicWidth
(),
drawable
.
getIntrinsicHeight
(),
drawable
.
getOpacity
()
!=
PixelFormat
.
OPAQUE
?
Bitmap
.
Config
.
ARGB_8888
:
Bitmap
.
Config
.
RGB_565
);
}
Canvas
canvas
=
new
Canvas
(
bitmap
);
drawable
.
setBounds
(
0
,
0
,
canvas
.
getWidth
(),
canvas
.
getHeight
());
drawable
.
draw
(
canvas
);
return
bitmap
;
}
/**
* bitmap转drawable
*
* @param res resources对象
* @param bitmap bitmap对象
* @return drawable
*/
public
static
Drawable
bitmap2Drawable
(
Resources
res
,
Bitmap
bitmap
)
{
return
bitmap
==
null
?
null
:
new
BitmapDrawable
(
res
,
bitmap
);
public
static
Drawable
bitmap2Drawable
(
Bitmap
bitmap
)
{
return
bitmap
==
null
?
null
:
new
BitmapDrawable
(
Utils
.
getContext
().
getResources
()
,
bitmap
);
}
/**
...
...
@@ -130,12 +131,11 @@ public final class ImageUtils {
/**
* byteArr转drawable
*
* @param res resources对象
* @param bytes 字节数组
* @return drawable
*/
public
static
Drawable
bytes2Drawable
(
Resources
res
,
byte
[]
bytes
)
{
return
res
==
null
?
null
:
bitmap2Drawable
(
res
,
bytes2Bitmap
(
bytes
));
public
static
Drawable
bytes2Drawable
(
byte
[]
bytes
)
{
return
bitmap2Drawable
(
bytes2Bitmap
(
bytes
));
}
/**
...
...
@@ -171,7 +171,7 @@ public final class ImageUtils {
int
height
=
options
.
outHeight
;
int
width
=
options
.
outWidth
;
int
inSampleSize
=
1
;
while
((
height
>>=
1
)
>
=
maxHeight
&&
(
width
>>=
1
)
>=
maxWidth
)
{
while
((
height
>>=
1
)
>
maxHeight
&&
(
width
>>=
1
)
>
maxWidth
)
{
inSampleSize
<<=
1
;
}
return
inSampleSize
;
...
...
@@ -316,32 +316,28 @@ public final class ImageUtils {
/**
* 获取bitmap
*
* @param res 资源对象
* @param id 资源id
* @param id 资源id
* @return bitmap
*/
public
static
Bitmap
getBitmap
(
Resources
res
,
int
id
)
{
if
(
res
==
null
)
return
null
;
return
BitmapFactory
.
decodeResource
(
res
,
id
);
public
static
Bitmap
getBitmap
(
int
id
)
{
return
BitmapFactory
.
decodeResource
(
Utils
.
getContext
().
getResources
(),
id
);
}
/**
* 获取bitmap
*
* @param res 资源对象
* @param id 资源id
* @param maxWidth 最大宽度
* @param maxHeight 最大高度
* @return bitmap
*/
public
static
Bitmap
getBitmap
(
Resources
res
,
int
id
,
int
maxWidth
,
int
maxHeight
)
{
if
(
res
==
null
)
return
null
;
public
static
Bitmap
getBitmap
(
int
id
,
int
maxWidth
,
int
maxHeight
)
{
BitmapFactory
.
Options
options
=
new
BitmapFactory
.
Options
();
options
.
inJustDecodeBounds
=
true
;
BitmapFactory
.
decodeResource
(
res
,
id
,
options
);
BitmapFactory
.
decodeResource
(
Utils
.
getContext
().
getResources
()
,
id
,
options
);
options
.
inSampleSize
=
calculateInSampleSize
(
options
,
maxWidth
,
maxHeight
);
options
.
inJustDecodeBounds
=
false
;
return
BitmapFactory
.
decodeResource
(
res
,
id
,
options
);
return
BitmapFactory
.
decodeResource
(
Utils
.
getContext
().
getResources
()
,
id
,
options
);
}
/**
...
...
@@ -715,8 +711,8 @@ public final class ImageUtils {
* renderScript模糊图片
* <p>API大于17</p>
*
* @param src
源图片
* @param radius
模糊半径(0...25)
* @param src 源图片
* @param radius 模糊半径(0...25)
* @return 模糊后的图片
*/
@TargetApi
(
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
...
...
@@ -982,15 +978,15 @@ public final class ImageUtils {
int
newHeight
=
src
.
getHeight
()
+
doubleBorder
;
Bitmap
ret
=
Bitmap
.
createBitmap
(
newWidth
,
newHeight
,
src
.
getConfig
());
Canvas
canvas
=
new
Canvas
(
ret
);
Rect
rect
=
new
Rect
(
0
,
0
,
newWidth
,
newHeight
);
//noinspection SuspiciousNameCombination
canvas
.
drawBitmap
(
src
,
borderWidth
,
borderWidth
,
null
);
Paint
paint
=
new
Paint
();
paint
.
setColor
(
color
);
paint
.
setStyle
(
Paint
.
Style
.
STROKE
);
// setStrokeWidth是居中画的,所以要两倍的宽度才能画,否则有一半的宽度是空的
paint
.
setStrokeWidth
(
doubleBorder
);
Rect
rect
=
new
Rect
(
0
,
0
,
newWidth
,
newHeight
);
canvas
.
drawRect
(
rect
,
paint
);
//noinspection SuspiciousNameCombination
canvas
.
drawBitmap
(
src
,
borderWidth
,
borderWidth
,
null
);
if
(
recycle
&&
!
src
.
isRecycled
())
src
.
recycle
();
return
ret
;
}
...
...
utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java
0 → 100644
浏览文件 @
968e844a
此差异已折叠。
点击以展开。
utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java
已删除
100644 → 0
浏览文件 @
44bd2efd
此差异已折叠。
点击以展开。
utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java
浏览文件 @
968e844a
package
com.blankj.utilcode.util
;
import
android.annotation.SuppressLint
;
import
android.content.Context
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.support.annotation.ColorInt
;
import
android.support.annotation.IdRes
;
import
android.support.annotation.LayoutRes
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.StringRes
;
import
android.text.SpannableString
;
import
android.text.Spanned
;
import
android.text.style.ForegroundColorSpan
;
import
android.view.Gravity
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.widget.TextView
;
import
android.widget.Toast
;
import
java.lang.ref.WeakReference
;
/**
* <pre>
* author: Blankj
...
...
@@ -23,12 +28,15 @@ import android.widget.Toast;
*/
public
final
class
ToastUtils
{
private
static
final
int
DEFAULT_COLOR
=
0x12000000
;
private
static
Toast
sToast
;
private
static
int
gravity
=
Gravity
.
CENTER_HORIZONTAL
|
Gravity
.
BOTTOM
;
private
static
int
xOffset
=
0
;
private
static
int
yOffset
=
(
int
)
(
64
*
Utils
.
getContext
().
getResources
().
getDisplayMetrics
().
density
+
0.5
);
@SuppressLint
(
"StaticFieldLeak"
)
private
static
View
customView
;
private
static
int
gravity
=
Gravity
.
CENTER_HORIZONTAL
|
Gravity
.
BOTTOM
;
private
static
int
xOffset
=
0
;
private
static
int
yOffset
=
(
int
)
(
64
*
Utils
.
getContext
().
getResources
().
getDisplayMetrics
().
density
+
0.5
);
private
static
int
backgroundColor
=
DEFAULT_COLOR
;
private
static
int
backgroundResource
=
-
1
;
private
static
int
messageColor
=
DEFAULT_COLOR
;
private
static
WeakReference
<
View
>
sViewWeakReference
;
private
static
Handler
sHandler
=
new
Handler
(
Looper
.
getMainLooper
());
private
ToastUtils
()
{
...
...
@@ -55,7 +63,7 @@ public final class ToastUtils {
*/
public
static
void
setView
(
@LayoutRes
int
layoutId
)
{
LayoutInflater
inflate
=
(
LayoutInflater
)
Utils
.
getContext
().
getSystemService
(
Context
.
LAYOUT_INFLATER_SERVICE
);
ToastUtils
.
customView
=
inflate
.
inflate
(
layoutId
,
null
);
sViewWeakReference
=
new
WeakReference
<>(
inflate
.
inflate
(
layoutId
,
null
)
);
}
/**
...
...
@@ -63,21 +71,53 @@ public final class ToastUtils {
*
* @param view 视图
*/
public
static
void
setView
(
View
view
)
{
ToastUtils
.
customView
=
view
;
public
static
void
setView
(
@Nullable
View
view
)
{
sViewWeakReference
=
view
==
null
?
null
:
new
WeakReference
<>(
view
)
;
}
/**
* 获取吐司view
*
* @return view
自定义view
* @return view
*/
public
static
View
getView
()
{
if
(
customView
!=
null
)
return
customView
;
if
(
sViewWeakReference
!=
null
)
{
final
View
view
=
sViewWeakReference
.
get
();
if
(
view
!=
null
)
{
return
view
;
}
}
if
(
sToast
!=
null
)
return
sToast
.
getView
();
return
null
;
}
/**
* 设置背景颜色
*
* @param backgroundColor 背景色
*/
public
static
void
setBackgroundColor
(
@ColorInt
int
backgroundColor
)
{
ToastUtils
.
backgroundColor
=
backgroundColor
;
}
/**
* 设置背景资源
*
* @param backgroundResource 背景资源
*/
public
static
void
setBackgroundResource
(
@IdRes
int
backgroundResource
)
{
ToastUtils
.
backgroundResource
=
backgroundResource
;
}
/**
* 设置消息颜色
*
* @param messageColor 颜色
*/
public
static
void
setMessageColor
(
@ColorInt
int
messageColor
)
{
ToastUtils
.
messageColor
=
messageColor
;
}
/**
* 安全地显示短时吐司
*
...
...
@@ -270,6 +310,44 @@ public final class ToastUtils {
show
(
format
,
Toast
.
LENGTH_LONG
,
args
);
}
/**
* 安全地显示短时自定义吐司
*/
public
static
void
showCustomShortSafe
()
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
""
,
Toast
.
LENGTH_SHORT
);
}
});
}
/**
* 安全地显示长时自定义吐司
*/
public
static
void
showCustomLongSafe
()
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
""
,
Toast
.
LENGTH_LONG
);
}
});
}
/**
* 显示短时自定义吐司
*/
public
static
void
showCustomShort
()
{
show
(
""
,
Toast
.
LENGTH_SHORT
);
}
/**
* 显示长时自定义吐司
*/
public
static
void
showCustomLong
()
{
show
(
""
,
Toast
.
LENGTH_LONG
);
}
/**
* 显示吐司
*
...
...
@@ -310,12 +388,34 @@ public final class ToastUtils {
*/
private
static
void
show
(
CharSequence
text
,
int
duration
)
{
cancel
();
if
(
customView
!=
null
)
{
sToast
=
new
Toast
(
Utils
.
getContext
());
sToast
.
setView
(
customView
);
sToast
.
setDuration
(
duration
);
}
else
{
sToast
=
Toast
.
makeText
(
Utils
.
getContext
(),
text
,
duration
);
boolean
isCustom
=
false
;
if
(
sViewWeakReference
!=
null
)
{
final
View
view
=
sViewWeakReference
.
get
();
if
(
view
!=
null
)
{
sToast
=
new
Toast
(
Utils
.
getContext
());
sToast
.
setView
(
view
);
sToast
.
setDuration
(
duration
);
isCustom
=
true
;
}
}
if
(!
isCustom
)
{
if
(
messageColor
!=
DEFAULT_COLOR
)
{
SpannableString
spannableString
=
new
SpannableString
(
text
);
ForegroundColorSpan
colorSpan
=
new
ForegroundColorSpan
(
messageColor
);
spannableString
.
setSpan
(
colorSpan
,
0
,
spannableString
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
sToast
=
Toast
.
makeText
(
Utils
.
getContext
(),
spannableString
,
duration
);
}
else
{
sToast
=
Toast
.
makeText
(
Utils
.
getContext
(),
text
,
duration
);
}
}
View
view
=
sToast
.
getView
();
if
(
backgroundColor
!=
DEFAULT_COLOR
||
backgroundResource
!=
-
1
)
{
if
(
backgroundColor
!=
DEFAULT_COLOR
)
{
view
.
setBackgroundColor
(
backgroundColor
);
}
if
(
backgroundResource
!=
-
1
)
{
view
.
setBackgroundResource
(
backgroundResource
);
}
}
sToast
.
setGravity
(
gravity
,
xOffset
,
yOffset
);
sToast
.
show
();
...
...
utilcode/src/test/java/com/blankj/utilcode/util/CacheUtilsTest.java
浏览文件 @
968e844a
...
...
@@ -35,6 +35,10 @@ import static com.blankj.utilcode.util.TestUtils.FILE_SEP;
@Config
(
manifest
=
Config
.
NONE
)
public
class
CacheUtilsTest
{
static
{
TestUtils
.
init
();
}
private
final
String
path1
=
TestUtils
.
TEST_PATH
+
FILE_SEP
+
"cache"
+
FILE_SEP
+
"cache1"
+
FILE_SEP
;
private
final
String
path2
=
TestUtils
.
TEST_PATH
+
FILE_SEP
+
"cache"
+
FILE_SEP
+
"cache2"
+
FILE_SEP
;
private
final
File
file1
=
new
File
(
path1
);
...
...
@@ -54,10 +58,6 @@ public class CacheUtilsTest {
private
Bitmap
mBitmap
=
Bitmap
.
createBitmap
(
100
,
100
,
Bitmap
.
Config
.
RGB_565
);
private
Drawable
mDrawable
=
new
BitmapDrawable
(
Utils
.
getContext
().
getResources
(),
mBitmap
);
static
{
TestUtils
.
init
();
}
public
CacheUtilsTest
()
{
try
{
mJSONObject
.
put
(
"class"
,
"CacheUtils"
);
...
...
utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java
浏览文件 @
968e844a
...
...
@@ -22,12 +22,12 @@ import java.util.Map;
@Config
(
manifest
=
Config
.
NONE
)
public
class
SPUtilsTest
{
private
SPUtils
spUtils1
;
private
SPUtils
spUtils2
;
static
{
TestUtils
.
init
();
}
private
SPUtils
spUtils1
;
private
SPUtils
spUtils2
;
@Before
public
void
setUp
()
throws
Exception
{
...
...
utilcode/src/test/java/com/blankj/utilcode/util/TestUtils.java
浏览文件 @
968e844a
...
...
@@ -116,5 +116,6 @@ public class TestUtils {
@Test
public
void
test
()
throws
Exception
{
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录