فهرست منبع

TRANSPARENT is displayed as a different type of circle in color chooser dialogs. Resolves #1604.

Aidan Follestad 6 سال پیش
والد
کامیت
c3acc479a9

+ 24 - 6
color/src/main/java/com/afollestad/materialdialogs/color/ColorCircleView.kt

@@ -8,12 +8,15 @@ package com.afollestad.materialdialogs.color
 import android.content.Context
 import android.graphics.Canvas
 import android.graphics.Color
+import android.graphics.Color.TRANSPARENT
 import android.graphics.Paint
 import android.graphics.Paint.Style.FILL
 import android.graphics.Paint.Style.STROKE
+import android.graphics.drawable.Drawable
 import android.util.AttributeSet
 import android.view.View
 import androidx.annotation.ColorInt
+import androidx.core.content.ContextCompat.getDrawable
 import com.afollestad.materialdialogs.color.utils.dimenPx
 
 /** @author Aidan Follestad (afollestad) */
@@ -27,6 +30,8 @@ internal class ColorCircleView(
 
   private val borderWidth = dimenPx(R.dimen.color_circle_view_border)
 
+  private var transparentGrid: Drawable? = null
+
   init {
     setWillNotDraw(false)
     strokePaint.style = STROKE
@@ -58,12 +63,20 @@ internal class ColorCircleView(
 
   override fun onDraw(canvas: Canvas) {
     super.onDraw(canvas)
-    canvas.drawCircle(
-        measuredWidth / 2f,
-        measuredHeight / 2f,
-        (measuredWidth / 2f) - borderWidth,
-        fillPaint
-    )
+    if (color == TRANSPARENT) {
+      if (transparentGrid == null) {
+        transparentGrid = getDrawable(context, R.drawable.transparentgrid)
+      }
+      transparentGrid?.setBounds(0, 0, measuredWidth, measuredHeight)
+      transparentGrid?.draw(canvas)
+    } else {
+      canvas.drawCircle(
+          measuredWidth / 2f,
+          measuredHeight / 2f,
+          (measuredWidth / 2f) - borderWidth,
+          fillPaint
+      )
+    }
     canvas.drawCircle(
         measuredWidth / 2f,
         measuredHeight / 2f,
@@ -71,4 +84,9 @@ internal class ColorCircleView(
         strokePaint
     )
   }
+
+  override fun onDetachedFromWindow() {
+    super.onDetachedFromWindow()
+    transparentGrid = null
+  }
 }

BIN
color/src/main/res/drawable-nodpi/transparentgrid.png