Skip to content

Commit fa88a21

Browse files
committed
1、完善代码
2、修复背景模式下的Bug
1 parent 50f1c85 commit fa88a21

File tree

7 files changed

+91
-83
lines changed

7 files changed

+91
-83
lines changed

GraphicsDrawable/src/main/java/com/flyjingfish/graphicsdrawablelib/GraphicsDrawable.kt

Lines changed: 54 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -181,54 +181,59 @@ open class GraphicsDrawable(val view: View) : Drawable() {
181181
mDrawableMatrix.reset()
182182
val widthScale = viewWidth / drawableWidth
183183
val heightScale = viewHeight / drawableHeight
184-
if (scaleType == ScaleType.CENTER) {
185-
mDrawableMatrix.postTranslate(
186-
(viewWidth - drawableWidth) / 2f,
187-
(viewHeight - drawableHeight) / 2f
188-
)
189-
} else if (scaleType == ScaleType.CENTER_CROP) {
190-
val scale = Math.max(widthScale, heightScale)
191-
mDrawableMatrix.postScale(scale, scale)
192-
mDrawableMatrix.postTranslate(
193-
(viewWidth - drawableWidth * scale) / 2f,
194-
(viewHeight - drawableHeight * scale) / 2f
195-
)
196-
} else if (scaleType == ScaleType.CENTER_INSIDE) {
197-
val scale = Math.min(1.0f, Math.min(widthScale, heightScale))
198-
mDrawableMatrix.postScale(scale, scale)
199-
mDrawableMatrix.postTranslate(
200-
(viewWidth - drawableWidth * scale) / 2f,
201-
(viewHeight - drawableHeight * scale) / 2f
202-
)
203-
} else {
204-
mTempSrc[0f, 0f, drawableWidth.toFloat()] = drawableHeight.toFloat()
205-
mTempDst[0f, 0f, viewWidth] = viewHeight
206-
when (scaleType) {
207-
ScaleType.FIT_CENTER -> mDrawableMatrix.setRectToRect(
208-
mTempSrc,
209-
mTempDst,
210-
Matrix.ScaleToFit.CENTER
211-
)
212-
213-
ScaleType.FIT_START -> mDrawableMatrix.setRectToRect(
214-
mTempSrc,
215-
mTempDst,
216-
Matrix.ScaleToFit.START
184+
when (scaleType) {
185+
ScaleType.CENTER -> {
186+
mDrawableMatrix.postTranslate(
187+
(viewWidth - drawableWidth) / 2f,
188+
(viewHeight - drawableHeight) / 2f
217189
)
218-
219-
ScaleType.FIT_END -> mDrawableMatrix.setRectToRect(
220-
mTempSrc,
221-
mTempDst,
222-
Matrix.ScaleToFit.END
190+
}
191+
ScaleType.CENTER_CROP -> {
192+
val scale = max(widthScale, heightScale)
193+
mDrawableMatrix.postScale(scale, scale)
194+
mDrawableMatrix.postTranslate(
195+
(viewWidth - drawableWidth * scale) / 2f,
196+
(viewHeight - drawableHeight * scale) / 2f
223197
)
224-
225-
ScaleType.FIT_XY -> mDrawableMatrix.setRectToRect(
226-
mTempSrc,
227-
mTempDst,
228-
Matrix.ScaleToFit.FILL
198+
}
199+
ScaleType.CENTER_INSIDE -> {
200+
val scale = min(1.0f, min(widthScale, heightScale))
201+
mDrawableMatrix.postScale(scale, scale)
202+
mDrawableMatrix.postTranslate(
203+
(viewWidth - drawableWidth * scale) / 2f,
204+
(viewHeight - drawableHeight * scale) / 2f
229205
)
230-
231-
else -> {}
206+
}
207+
else -> {
208+
mTempSrc[0f, 0f, drawableWidth.toFloat()] = drawableHeight.toFloat()
209+
mTempDst[0f, 0f, viewWidth] = viewHeight
210+
when (scaleType) {
211+
ScaleType.FIT_CENTER -> mDrawableMatrix.setRectToRect(
212+
mTempSrc,
213+
mTempDst,
214+
Matrix.ScaleToFit.CENTER
215+
)
216+
217+
ScaleType.FIT_START -> mDrawableMatrix.setRectToRect(
218+
mTempSrc,
219+
mTempDst,
220+
Matrix.ScaleToFit.START
221+
)
222+
223+
ScaleType.FIT_END -> mDrawableMatrix.setRectToRect(
224+
mTempSrc,
225+
mTempDst,
226+
Matrix.ScaleToFit.END
227+
)
228+
229+
ScaleType.FIT_XY -> mDrawableMatrix.setRectToRect(
230+
mTempSrc,
231+
mTempDst,
232+
Matrix.ScaleToFit.FILL
233+
)
234+
235+
else -> {}
236+
}
232237
}
233238
}
234239
getDrawableRect()
@@ -252,10 +257,10 @@ open class GraphicsDrawable(val view: View) : Drawable() {
252257
val right: Float
253258
val bottom: Float
254259
if (mBackgroundMode) {
255-
left = mMatrixRectF.left
256-
top = mMatrixRectF.top
257-
right = mMatrixRectF.right
258-
bottom = mMatrixRectF.bottom
260+
left = max(mMatrixRectF.left,0f)
261+
top = max(mMatrixRectF.top,0f)
262+
right = min(mMatrixRectF.right,viewWidth)
263+
bottom = min(mMatrixRectF.bottom,viewHeight)
259264
} else {
260265
val paddingLeft = getViewPaddingLeft().toFloat()
261266
val paddingTop = getViewPaddingTop().toFloat()

GraphicsDrawableCoilLib/src/main/java/com/flyjingfish/graphicsdrawablecoillib/CoilGraphicsImageViewTarget.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import android.widget.ImageView
55
import coil.target.ImageViewTarget
66
import com.flyjingfish.graphicsdrawablelib.GraphicsDrawable
77

8-
open class CoilGraphicsImageViewTarget(view: ImageView, private val mGraphicsDrawable: GraphicsDrawable) : ImageViewTarget(view) {
8+
open class CoilGraphicsImageViewTarget(private val mGraphicsDrawable: GraphicsDrawable) : ImageViewTarget(mGraphicsDrawable.view as ImageView) {
99
private val mStartGraphicsDrawable: GraphicsDrawable = mGraphicsDrawable.copy()
1010
private val mFailedGraphicsDrawable: GraphicsDrawable = mGraphicsDrawable.copy()
1111

GraphicsDrawableCoilLib/src/main/java/com/flyjingfish/graphicsdrawablecoillib/CoilGraphicsViewBackgroundTarget.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.flyjingfish.graphicsdrawablecoillib
22

33
import android.graphics.drawable.Drawable
4-
import android.widget.ImageView
5-
import coil.target.ImageViewTarget
64
import com.flyjingfish.graphicsdrawablelib.GraphicsDrawable
75

8-
open class CoilGraphicsViewBackgroundTarget(view: ImageView, private val graphicsDrawable: GraphicsDrawable) : ViewBackgroundTarget(view) {
6+
open class CoilGraphicsViewBackgroundTarget(graphicsDrawable: GraphicsDrawable) : ViewBackgroundTarget(graphicsDrawable.view) {
97
private val mGraphicsDrawable: GraphicsDrawable
108
private val mStartGraphicsDrawable: GraphicsDrawable
119
private val mFailedGraphicsDrawable: GraphicsDrawable

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
```gradle
3434
dependencies {
3535
//必选项
36-
implementation 'io.github.FlyJingFish:GraphicsDrawable:1.0.1'
36+
implementation 'io.github.FlyJingFish:GraphicsDrawable:1.0.2'
3737
//可选项,如果您使用 Glide 则使用这个
38-
implementation 'io.github.FlyJingFish:GraphicsDrawableGlideLib:1.0.1'
38+
implementation 'io.github.FlyJingFish:GraphicsDrawableGlideLib:1.0.2'
3939
//可选项,如果您使用 Coil 则使用这个
40-
implementation 'io.github.FlyJingFish:GraphicsDrawableCoilLib:1.0.1'
40+
implementation 'io.github.FlyJingFish:GraphicsDrawableCoilLib:1.0.2'
4141
}
4242
```
4343
## 第二步、使用说明
@@ -135,7 +135,7 @@ val request = ImageRequest.Builder(context)
135135
.data(url)
136136
.placeholder(R.drawable.placeholder)
137137
.error(R.drawable.error)
138-
.target(CoilGraphicsImageViewTarget(view, pic1Drawable))
138+
.target(CoilGraphicsImageViewTarget(pic1Drawable))
139139
.build()
140140

141141
imageLoader.enqueue(request)
@@ -154,7 +154,7 @@ val request = ImageRequest.Builder(context)
154154
.data(url)
155155
.placeholder(R.drawable.placeholder)
156156
.error(R.drawable.error)
157-
.target(CoilGraphicsViewBackgroundTarget(view, pic4Drawable))
157+
.target(CoilGraphicsViewBackgroundTarget(pic4Drawable))
158158
.build()
159159
imageLoader.enqueue(request)
160160

app/src/main/java/com/flyjingfish/graphicsdrawable/MainActivity.kt

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,28 @@ import com.flyjingfish.graphicsdrawablelib.GraphicsDrawable
2222
class MainActivity : AppCompatActivity() {
2323
private lateinit var binding: ActivityMainBinding
2424
private lateinit var itemData: String
25+
private lateinit var pic1Drawable : GraphicsDrawable
26+
private lateinit var pic2Drawable : GraphicsDrawable
27+
private lateinit var pic3Drawable : GraphicsDrawable
28+
private lateinit var pic4Drawable : GraphicsDrawable
2529
override fun onCreate(savedInstanceState: Bundle?) {
2630
super.onCreate(savedInstanceState)
2731
binding = ActivityMainBinding.inflate(layoutInflater)
2832
setContentView(binding.root)
33+
pic1Drawable = GraphicsDrawable(binding.iv1)
34+
pic1Drawable.setShapeType(GraphicsDrawable.ShapeType.RECTANGLE)
35+
pic1Drawable.setRadius(MyImageLoader.dp2px(20f).toFloat())
2936

37+
pic2Drawable = GraphicsDrawable(binding.iv2)
38+
pic2Drawable.setShapeType(GraphicsDrawable.ShapeType.RECTANGLE)
39+
pic2Drawable.setRelativeRadius(MyImageLoader.dp2px(10f).toFloat(),MyImageLoader.dp2px(20f).toFloat(),MyImageLoader.dp2px(30f).toFloat(),MyImageLoader.dp2px(40f).toFloat())
40+
41+
pic3Drawable = GraphicsDrawable(binding.iv3)
42+
pic3Drawable.setShapeType(GraphicsDrawable.ShapeType.OVAL)
43+
44+
pic4Drawable = GraphicsDrawable(binding.iv4)
45+
pic4Drawable.setShapeType(GraphicsDrawable.ShapeType.CUSTOM)
46+
pic4Drawable.setCustomDrawable(resources.getDrawable(R.drawable.ic_vector_flower))
3047
binding.rgLoad.setOnCheckedChangeListener { _, checkedId ->
3148
if (checkedId == R.id.rb_glide) {
3249
MyImageLoader.loadType = MyImageLoader.LoaderType.GLIDE
@@ -74,20 +91,7 @@ class MainActivity : AppCompatActivity() {
7491
binding.iv4.setImageDrawable(null)
7592
}
7693

77-
val pic1Drawable = GraphicsDrawable(binding.iv1)
78-
pic1Drawable.setShapeType(GraphicsDrawable.ShapeType.RECTANGLE)
79-
pic1Drawable.setRadius(MyImageLoader.dp2px(20f).toFloat())
80-
81-
val pic2Drawable = GraphicsDrawable(binding.iv2)
82-
pic2Drawable.setShapeType(GraphicsDrawable.ShapeType.RECTANGLE)
83-
pic2Drawable.setRelativeRadius(MyImageLoader.dp2px(10f).toFloat(),MyImageLoader.dp2px(20f).toFloat(),MyImageLoader.dp2px(30f).toFloat(),MyImageLoader.dp2px(40f).toFloat())
84-
85-
val pic3Drawable = GraphicsDrawable(binding.iv3)
86-
pic3Drawable.setShapeType(GraphicsDrawable.ShapeType.OVAL)
8794

88-
val pic4Drawable = GraphicsDrawable(binding.iv4)
89-
pic4Drawable.setShapeType(GraphicsDrawable.ShapeType.CUSTOM)
90-
pic4Drawable.setCustomDrawable(resources.getDrawable(R.drawable.ic_vector_flower))
9195

9296
// val uri = Uri.parse(
9397
// ContentResolver.SCHEME_ANDROID_RESOURCE
@@ -175,6 +179,8 @@ class MainActivity : AppCompatActivity() {
175179
(view as RadioButton).isChecked = true
176180
}
177181

182+
private var mScaleType: ScaleType ?= null
183+
178184
private fun setScaleType(scaleType: ScaleType){
179185
binding.iv1.scaleType = scaleType
180186
binding.iv2.scaleType = scaleType
@@ -187,7 +193,13 @@ class MainActivity : AppCompatActivity() {
187193
binding.tvFitStart.isChecked = false
188194
binding.tvFitEnd.isChecked = false
189195
binding.tvFixXY.isChecked = false
190-
196+
mScaleType = scaleType
197+
if (MyImageLoader.backgroundMode){
198+
pic1Drawable.setScaleType(scaleType)
199+
pic2Drawable.setScaleType(scaleType)
200+
pic3Drawable.setScaleType(scaleType)
201+
pic4Drawable.setScaleType(scaleType)
202+
}
191203
setData()
192204
}
193205
}

app/src/main/java/com/flyjingfish/graphicsdrawable/MyImageLoader.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,15 @@ import android.util.TypedValue
55
import android.widget.ImageView
66
import androidx.annotation.DrawableRes
77
import coil.Coil
8-
import coil.request.ErrorResult
98
import coil.request.ImageRequest
10-
import coil.request.SuccessResult
119
import com.bumptech.glide.Glide
1210
import com.bumptech.glide.RequestBuilder
13-
import com.bumptech.glide.load.DataSource
14-
import com.bumptech.glide.load.engine.GlideException
15-
import com.bumptech.glide.request.RequestListener
1611
import com.bumptech.glide.request.RequestOptions
17-
import com.bumptech.glide.request.target.Target
1812
import com.flyjingfish.graphicsdrawablecoillib.CoilGraphicsImageViewTarget
1913
import com.flyjingfish.graphicsdrawablecoillib.CoilGraphicsViewBackgroundTarget
2014
import com.flyjingfish.graphicsdrawableglidelib.GlideGraphicsImageViewTarget
2115
import com.flyjingfish.graphicsdrawableglidelib.GlideGraphicsViewBackgroundTarget
2216
import com.flyjingfish.graphicsdrawablelib.GraphicsDrawable
23-
import jp.wasabeef.glide.transformations.BlurTransformation
2417

2518
object MyImageLoader {
2619
var loadType: LoaderType = LoaderType.GLIDE
@@ -61,9 +54,9 @@ object MyImageLoader {
6154

6255
if (useDrawable) {
6356
if (backgroundMode){
64-
requestBuilder.target(CoilGraphicsViewBackgroundTarget(iv, graphicsDrawable))
57+
requestBuilder.target(CoilGraphicsViewBackgroundTarget(graphicsDrawable))
6558
}else{
66-
requestBuilder.target(CoilGraphicsImageViewTarget(iv, graphicsDrawable))
59+
requestBuilder.target(CoilGraphicsImageViewTarget(graphicsDrawable))
6760
}
6861
} else {
6962
requestBuilder.target(iv)

version.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
#Fri Mar 15 23:39:02 CST 2024
2-
PROJ_VERSION=1.0.1
1+
#Sat Mar 16 00:32:34 CST 2024
2+
PROJ_VERSION=1.0.2

0 commit comments

Comments
 (0)