【问题标题】:How can I implement the custom view similar to this image?如何实现类似于此图像的自定义视图?
【发布时间】:2021-05-11 13:31:00
【问题描述】:

我想在我的应用中实现这个搜索栏。我为此创建了一个自定义视图。我面临的唯一问题是当圆形视图越过文本时如何将文本的颜色从黑色更改为白色。 The image showing the custom view

我的 onDraw 方法()

override fun onDraw(canvas: Canvas?) {
    canvas?.save()
    canvas?.drawCircle(thumbX + 20F, thumbY, thumbRadius, mThumbPaint)
    canvas?.drawBitmap(drawTextBitmap(), 0F, 0F, Paint().apply {
        isAntiAlias = true
    })
}

drawTextBitmap 方法绘制 1 2 3 4 5 .....

private fun drawTextBitmap(): Bitmap {
    val h = height
    val w = width

    val conf = Bitmap.Config.ARGB_8888
    val bmp = Bitmap.createBitmap(w, h, conf)
    val newCanvas: Canvas? = Canvas(bmp)
    //newCanvas?.drawColor(Color.GREEN)

    val initialOffsetX = paddingLeftCustom + thumbRadius
    //newCanvas.drawColor(Color.BLACK)
    for (i in 1..10) {
        val textPaint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.DITHER_FLAG)
        textPaint.color = Color.BLACK
        textPaint.textSize = TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_SP,
            20f,
            resources.displayMetrics
        )
            .toInt().toFloat()
        textPaint.textAlign = Paint.Align.LEFT
        val metric: Paint.FontMetrics = textPaint.fontMetrics
        val textHeight = Math.ceil((metric.descent - metric.ascent).toDouble()).toInt()
        textPaint.colorFilter = PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.DST)
        val y = (textHeight - metric.descent) as Float
        newCanvas?.drawText(i.toString(), initialOffsetX + (i - 1) * spaceBetweenTexts, y, textPaint)
    }

    return bmp
}

我正在使用波特的达夫概念。我面临的问题是我想混合文本颜色和拇指颜色(圆形视图),但在我应用颜色过滤器的任何视图上都会考虑画布颜色。

【问题讨论】:

  • 你必须分享一些代码到这个自定义视图。

标签: android


【解决方案1】:

您需要为该文本颜色使用 a。 就像是: seat_item_text_color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:color="@color/black">
    </item>
    <item
        android:state_selected="false"
        android:color="@color/white">
    </item>
</selector>

您将将此选择器设置为该 TextView 的文本颜色。

【讨论】:

  • 我认为我无法使用它。因为我在这里做的是 1. 创建自定义视图 2. 在自定义视图画布中,我使用上面提到的 drawTextBitmap 函数在该位图中创建位图,我使用 canvas.drawText 函数绘制了文本。 3. 然后我创建了一个拇指或圆形视图。那么如何在自定义绘制的文本上使用选择器
  • 在这种情况下,您需要在自定义视图中添加一个状态(按下和默认),并根据该状态设置 TextPaint 的颜色。当状态改变时不要忘记强制重绘。
  • 我发现我现在唯一的问题是这个stackoverflow.com/questions/18387814/… 但在我的情况下似乎没有任何工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多