Improve mouse accessibility
This commit is contained in:
@@ -114,20 +114,6 @@ open class CoilImageView @JvmOverloads constructor(
|
||||
.build(),
|
||||
)
|
||||
|
||||
@Deprecated("Use more specific overrides instead")
|
||||
fun setImageAsync(request: ImageRequest) = enqueueRequest(
|
||||
request.newBuilder()
|
||||
.lifecycle(request.lifecycle ?: findViewTreeLifecycleOwner()?.lifecycle)
|
||||
.target(this)
|
||||
.size(
|
||||
if (request.sizeResolver == SizeResolver.ORIGINAL) {
|
||||
ViewSizeResolver(this)
|
||||
} else {
|
||||
request.sizeResolver
|
||||
},
|
||||
).build(),
|
||||
)
|
||||
|
||||
fun disposeImage() {
|
||||
CoilUtils.dispose(this)
|
||||
currentRequest = null
|
||||
|
||||
@@ -9,7 +9,10 @@ import android.util.AttributeSet
|
||||
import android.view.GestureDetector
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.TooltipCompat
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.view.PointerIconCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import org.koitharu.kotatsu.core.util.ext.getThemeColor
|
||||
import org.koitharu.kotatsu.core.util.ext.resolveDp
|
||||
import org.koitharu.kotatsu.parsers.util.replaceWith
|
||||
@@ -21,10 +24,12 @@ class PieChartView @JvmOverloads constructor(
|
||||
) : View(context, attrs, defStyleAttr), GestureDetector.OnGestureListener {
|
||||
|
||||
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
|
||||
private val activePointerIcon = PointerIconCompat.getSystemIcon(context, PointerIconCompat.TYPE_HAND)
|
||||
private val segments = ArrayList<Segment>()
|
||||
private val chartBounds = RectF()
|
||||
private val clearColor = context.getThemeColor(android.R.attr.colorBackground)
|
||||
private val touchDetector = GestureDetector(context, this)
|
||||
private var hoverSegment = -1
|
||||
private var highlightedSegment = -1
|
||||
|
||||
var onSegmentClickListener: OnSegmentClickListener? = null
|
||||
@@ -41,6 +46,8 @@ class PieChartView @JvmOverloads constructor(
|
||||
paint.color = segment.color
|
||||
if (i == highlightedSegment) {
|
||||
paint.color = ColorUtils.setAlphaComponent(paint.color, 180)
|
||||
} else if (i == hoverSegment) {
|
||||
paint.color = ColorUtils.setAlphaComponent(paint.color, 200)
|
||||
}
|
||||
paint.style = Paint.Style.FILL
|
||||
val sweepAngle = segment.percent * 360f
|
||||
@@ -119,6 +126,23 @@ class PieChartView @JvmOverloads constructor(
|
||||
|
||||
override fun onFling(e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean = false
|
||||
|
||||
override fun onHoverEvent(event: MotionEvent): Boolean {
|
||||
val segment = when (event.actionMasked) {
|
||||
MotionEvent.ACTION_HOVER_ENTER,
|
||||
MotionEvent.ACTION_HOVER_MOVE -> findSegmentIndex(event.x, event.y)
|
||||
|
||||
MotionEvent.ACTION_HOVER_EXIT -> -1
|
||||
else -> hoverSegment
|
||||
}
|
||||
if (hoverSegment != segment) {
|
||||
hoverSegment = segment
|
||||
TooltipCompat.setTooltipText(this, segments.getOrNull(segment)?.label)
|
||||
ViewCompat.setPointerIcon(this, if (segment == -1) null else activePointerIcon)
|
||||
invalidate()
|
||||
}
|
||||
return super.onHoverEvent(event) || segment != -1
|
||||
}
|
||||
|
||||
fun setData(value: List<Segment>) {
|
||||
segments.replaceWith(value)
|
||||
invalidate()
|
||||
|
||||
@@ -46,8 +46,10 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/details"
|
||||
android:minWidth="?minTouchTargetSize"
|
||||
android:minHeight="?minTouchTargetSize"
|
||||
android:tooltipText="@string/details"
|
||||
app:srcCompat="@drawable/ic_open_external" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
Reference in New Issue
Block a user