【发布时间】:2016-05-16 09:38:40
【问题描述】:
我有一个如上所述的自定义轮子选择器视图。是否可以将蓝色矩形突出显示的文本着色为白色,即使只是部分?所以如果它在文本上占 50%,它会将一半变成白色,一半变成黑色?
编辑:
我从这里使用 Java 代码(移植到 C#):https://code.google.com/archive/p/android-wheel/。
基本上,蓝色矩形是我在代码中放置在可滚动文本后面的 xml 定义的形状。
然后我使用以下代码绘制矩形和顶部的项目:
/**
* Draws items
* @param canvas the canvas for drawing
*/
private void drawItems(Canvas canvas)
{
canvas.Save();
int top = (currentItem - firstItem) * getItemHeight() + (getItemHeight() - this.Height) / 2;
canvas.Translate(PADDING, -top + scrollingOffset);
itemsLayout.Draw(canvas);
canvas.Restore();
}
/**
* Draws rect for current value
* @param canvas the canvas for drawing
*/
private void drawCenterRect(Canvas canvas)
{
int center = this.Height / 2;
int offset = (int)(getItemHeight() / 2 * 1.2);
centerDrawable.SetBounds(0, center - offset, this.Width, center + offset);
centerDrawable.Draw(canvas);
}
据我所知,矩形本身没有设置高亮或 ColorPrimaryInverse 等属性的文本属性。
编辑 2:
据我所知,我需要在覆盖的 onDraw 中为构成我的控件的每个 TextView 使用 Volodymyr 的代码。这是我目前所拥有的:
protected override void OnDraw(Canvas canvas)
{
Rect rect = new Rect();
this.GetDrawingRect(rect);
Paint mpaint = new Paint();
mpaint.Color = Color.Black;
mpaint.SetStyle(Style.Fill);
canvas.Save();
canvas.ClipRect(rect, Region.Op.Difference);
this.SetTextColor(Color.Black);
base.OnDraw(canvas);
canvas.Restore();
mpaint.Color = Color.White;
canvas.Save();
canvas.ClipRect(rect, Region.Op.Replace); // lets draw inside center rect only
this.SetTextColor(Color.White);
base.OnDraw(canvas);
canvas.Restore();
}
但这只会将所有元素的文本颜色更改为白色。我觉得我在这里很近,任何帮助将不胜感激!
【问题讨论】:
-
您是否在问是否可以给文本(如 04:00)提供两种颜色(白色和黑色)?我认为只能用不同的颜色为文本的部分/字符着色。您可以尝试设置像suggested here 这样的突出显示颜色,看看是整个文本改变还是只有突出显示的部分。您也可以查看textColorPrimaryInverse。
-
是的,没错。我将研究这些属性,但我不认为我的代码/xml 设置的方式使这成为可能。我想我会编辑我的问题以展示我到目前为止所做的事情。
标签: java c# android xml xamarin.android