Skip to content

Commit 77faf75

Browse files
committed
Bugfixes. Added blur hash demo
1 parent 1e4d093 commit 77faf75

File tree

6 files changed

+109
-79
lines changed

6 files changed

+109
-79
lines changed

app/src/main/java/com/goodayapps/avatarview/App.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import coil.Coil
66
import coil.ImageLoader
77
import coil.decode.GifDecoder
88
import coil.decode.ImageDecoderDecoder
9+
import coil.request.CachePolicy
910
import coil.util.DebugLogger
1011

1112
class App : Application() {
@@ -23,6 +24,7 @@ class App : Application() {
2324
add(GifDecoder.Factory())
2425
}
2526
}
27+
.diskCachePolicy(CachePolicy.DISABLED)
2628
.logger(DebugLogger())
2729
.build()
2830

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.goodayapps.avatarview
2+
3+
import coil.load
4+
import coil.request.ImageRequest
5+
import com.goodayapps.widget.AvatarView
6+
7+
fun AvatarView.loadWithBlurHash(src: String, blurHash: String) {
8+
this.blurHash = blurHash
9+
10+
val builder: ImageRequest.Builder.() -> Unit = {
11+
placeholder(this@loadWithBlurHash.drawable)
12+
error(this@loadWithBlurHash.drawable)
13+
}
14+
15+
load(src, builder = builder)
16+
}

app/src/main/java/com/goodayapps/avatarview/MainActivity.kt

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
11
package com.goodayapps.avatarview
22

3-
import android.content.Context
4-
import android.os.Build
53
import android.os.Bundle
64
import android.util.DisplayMetrics
75
import android.widget.SeekBar
86
import androidx.appcompat.app.AppCompatActivity
97
import androidx.core.view.children
10-
import coil.Coil
11-
import coil.ComponentRegistry
12-
import coil.ImageLoader
13-
import coil.decode.GifDecoder
14-
import coil.decode.ImageDecoderDecoder
15-
import coil.decode.SvgDecoder
168
import coil.load
17-
import coil.request.CachePolicy
18-
import coil.util.DebugLogger
199
import com.goodayapps.avatarview.databinding.ActivityMainBinding
2010
import com.goodayapps.widget.AvatarDrawable
2111
import com.goodayapps.widget.AvatarView
@@ -29,7 +19,11 @@ class MainActivity : AppCompatActivity() {
2919

3020
initViews()
3121

32-
binding.avatar111.load("https://media4.giphy.com/media/f8hd7QP9LT31Rk2NG1/giphy.gif")
22+
binding.korraAvatar.load("https://media4.giphy.com/media/f8hd7QP9LT31Rk2NG1/giphy.gif")
23+
binding.blurHashAvatar.loadWithBlurHash(
24+
src = "https://www.terriwindling.com/.a/6a00e54fcf7385883401b7c74c966d970b-800wi",
25+
blurHash = "UGAKELD+bxs*_Ko#N0%KxuxtoeR+NNobxrM#"
26+
)
3327
}
3428

3529
private fun initViews() {

app/src/main/res/layout/activity_main.xml

Lines changed: 82 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,13 @@
3535
android:showDividers="middle">
3636

3737
<com.goodayapps.widget.AvatarView
38-
android:id="@+id/avatar111"
38+
android:id="@+id/korra_avatar"
3939
style="@style/AvatarStyleHelper"
4040
android:layout_width="@dimen/avatar_size"
4141
android:layout_height="@dimen/avatar_size"
4242
android:scaleType="centerCrop"
43-
android:src="@drawable/ic_bell"
4443
app:avBorderColor="#FF0000"
4544
app:avBorderColorSecondary="#FF9D00"
46-
app:avBorderGradientAngle="135"
4745
app:avBorderWidth="5dp"
4846
app:iconDrawableScale="1"
4947
app:placeholderText="OMG" />
@@ -53,78 +51,95 @@
5351
style="@style/AvatarStyleHelper"
5452
android:layout_width="@dimen/avatar_size"
5553
android:layout_height="@dimen/avatar_size"
56-
app:avBackgroundColor="@android:color/transparent"
5754
android:scaleType="centerCrop"
5855
android:src="@drawable/ic_bell"
56+
android:tint="@color/colorPrimary"
57+
app:avBackgroundColor="@android:color/transparent"
58+
app:avBorderColor="#FF0000"
59+
app:avBorderColorSecondary="#FF9D00"
60+
app:avBorderGradientAngle="135"
61+
app:avBorderWidth="5dp"
62+
app:iconDrawableScale=".3"
63+
app:placeholderText="OMG" />
64+
65+
<com.goodayapps.widget.AvatarView
66+
style="@style/AvatarStyleHelper"
67+
android:layout_width="@dimen/avatar_size"
68+
android:layout_height="@dimen/avatar_size"
69+
android:src="@drawable/ic_baseline_cloud_circle_24"
5970
app:avBorderColor="#FF0000"
6071
app:avBorderColorSecondary="#FF9D00"
6172
app:avBorderGradientAngle="135"
6273
app:avBorderWidth="5dp"
63-
app:iconDrawableScale=".5"
74+
app:iconDrawableScale=".3"
6475
app:placeholderText="OMG" />
6576

66-
<!--
67-
<com.goodayapps.widget.AvatarView
68-
style="@style/AvatarStyleHelper"
69-
android:layout_width="@dimen/avatar_size"
70-
android:layout_height="@dimen/avatar_size"
71-
android:src="@drawable/ic_baseline_cloud_circle_24"
72-
app:avBorderColor="#FF0000"
73-
app:avBorderColorSecondary="#FF9D00"
74-
app:avBorderGradientAngle="135"
75-
app:avBorderWidth="5dp"
76-
app:iconDrawableScale=".3"
77-
app:placeholderText="OMG" />
78-
79-
<com.goodayapps.widget.AvatarView
80-
style="@style/AvatarStyleHelper"
81-
android:layout_width="@dimen/avatar_size"
82-
android:layout_height="@dimen/avatar_size"
83-
android:src="@drawable/ic_more"
84-
app:avBorderColor="#FF0000"
85-
app:avBorderColorSecondary="#FF9D00"
86-
app:avBorderGradientAngle="135"
87-
app:avBorderWidth="5dp"
88-
app:iconDrawableScale=".3"
89-
app:placeholderText="OMG" />
90-
91-
<com.goodayapps.widget.AvatarView
92-
style="@style/AvatarStyleHelper"
93-
android:layout_width="@dimen/avatar_size"
94-
android:layout_height="@dimen/avatar_size"
95-
android:src="@drawable/ic_launcher_foreground"
96-
app:avArchesAngle="0"
97-
app:avArchesCount="4"
98-
app:avArchesDegreeArea="90"
99-
app:avArchesType="single"
100-
app:avAvatarMargin="5dp"
101-
app:avBackgroundColor="@color/colorPrimary"
102-
app:avBorderColor="#4D8989A8"
103-
app:avBorderWidth="5dp"
104-
app:avTextSizePercentage=".7"
105-
app:avVolumetricType="none"
106-
app:iconDrawableScale=".7"
107-
app:placeholderText="AV" />
108-
109-
<com.goodayapps.widget.AvatarView
110-
style="@style/AvatarStyleHelper"
111-
android:layout_width="@dimen/avatar_size"
112-
android:layout_height="@dimen/avatar_size"
113-
android:src="@drawable/avatar1"
114-
app:avBackgroundColor="@color/colorPrimary"
115-
app:avBorderColor="@color/colorAccent"
116-
app:avBorderWidth="5dp" />
117-
118-
<com.goodayapps.widget.AvatarView
119-
style="@style/AvatarStyleHelper"
120-
android:layout_width="@dimen/avatar_size"
121-
android:layout_height="@dimen/avatar_size"
122-
android:fontFamily="@font/font_19849"
123-
app:avBackgroundColor="@color/colorPrimary"
124-
app:avBorderColor="@color/colorAccent"
125-
app:avBorderWidth="5dp"
126-
app:iconDrawableScale=".7"
127-
app:placeholderText="AV" />-->
77+
<com.goodayapps.widget.AvatarView
78+
style="@style/AvatarStyleHelper"
79+
android:layout_width="@dimen/avatar_size"
80+
android:layout_height="@dimen/avatar_size"
81+
android:src="@drawable/ic_more"
82+
app:avArchesAngle="360"
83+
app:avArchesCount="15"
84+
app:avArchesDegreeArea="360"
85+
app:avAvatarMargin="8dp"
86+
app:avBorderColor="#FF0000"
87+
app:avBorderColorSecondary="#FF9D00"
88+
app:avBorderGradientAngle="135"
89+
app:avBorderWidth="5dp"
90+
app:iconDrawableScale=".3"
91+
app:placeholderText="OMG" />
92+
93+
<com.goodayapps.widget.AvatarView
94+
style="@style/AvatarStyleHelper"
95+
android:layout_width="@dimen/avatar_size"
96+
android:layout_height="@dimen/avatar_size"
97+
android:src="@drawable/ic_launcher_foreground"
98+
app:avArchesAngle="0"
99+
app:avArchesCount="4"
100+
app:avArchesDegreeArea="90"
101+
app:avArchesType="single"
102+
app:avAvatarMargin="5dp"
103+
app:avBackgroundColor="@color/colorPrimary"
104+
app:avBorderColor="#4D8989A8"
105+
app:avBorderWidth="5dp"
106+
app:avTextSizePercentage=".7"
107+
app:avVolumetricType="none"
108+
app:iconDrawableScale=".7"
109+
app:placeholderText="AV" />
110+
111+
<com.goodayapps.widget.AvatarView
112+
style="@style/AvatarStyleHelper"
113+
android:layout_width="@dimen/avatar_size"
114+
android:layout_height="@dimen/avatar_size"
115+
android:src="@drawable/avatar1"
116+
app:avBackgroundColor="@color/colorPrimary"
117+
app:avBorderColor="@color/colorAccent"
118+
app:avBorderWidth="5dp" />
119+
120+
<com.goodayapps.widget.AvatarView
121+
style="@style/AvatarStyleHelper"
122+
android:layout_width="@dimen/avatar_size"
123+
android:layout_height="@dimen/avatar_size"
124+
android:fontFamily="@font/font_19849"
125+
app:avBackgroundColor="@color/colorPrimary"
126+
app:avBorderColor="@color/colorAccent"
127+
app:avBorderWidth="5dp"
128+
app:iconDrawableScale=".7"
129+
app:placeholderText="AV" />
130+
131+
<com.goodayapps.widget.AvatarView
132+
android:id="@+id/blur_hash_avatar"
133+
style="@style/AvatarStyleHelper"
134+
android:layout_width="@dimen/avatar_size"
135+
android:layout_height="@dimen/avatar_size"
136+
android:fontFamily="@font/font_19849"
137+
android:scaleType="centerCrop"
138+
app:avBorderColor="#FF0000"
139+
app:avBorderColorSecondary="#FF9D00"
140+
app:avBorderWidth="5dp"
141+
app:iconDrawableScale="1"
142+
app:placeholderText="OMG" />
128143
</GridLayout>
129144

130145
<LinearLayout

avatar-view/src/main/java/com/goodayapps/widget/AvatarDrawable.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class AvatarDrawable private constructor(
181181
isIconDrawable = false
182182
val bitmapSize = size - avatarMargin
183183

184-
ThumbnailUtils.extractThumbnail(avatarDrawable.bitmap, bitmapSize, bitmapSize)
184+
ThumbnailUtils.extractThumbnail(avatarDrawable.bitmap.copy(Bitmap.Config.ARGB_8888, false), bitmapSize, bitmapSize)
185185
}
186186
is Animatable -> {
187187
isIconDrawable = false

avatar-view/src/main/java/com/goodayapps/widget/AvatarView.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.res.TypedArray
55
import android.graphics.Canvas
66
import android.graphics.Color
77
import android.graphics.Typeface
8+
import android.graphics.drawable.Drawable
89
import android.os.Build
910
import android.util.AttributeSet
1011
import androidx.annotation.ColorInt
@@ -192,6 +193,8 @@ open class AvatarView : AppCompatImageView {
192193
}
193194

194195
canvas?.let { newDrawable.draw(it) }
196+
197+
postInvalidate()
195198
}
196199

197200
private fun configureStyleValues(typedArray: TypedArray) {

0 commit comments

Comments
 (0)