У меня есть файл, содержащий градиент (textgradient.xml
) в моей доступной папке. Мне нужно поставить этот градиент как цвет текста TextView
через Java. Как это сделать?Как установить градиент как цвет текста TextView?
ответ
Вам просто нужно создать ресурс, пригодный для рисования (см. Пример ниже), и добавить его в макет, созданный для вашего ListItem.
вытяжка (в вашем разрешении \ вытяжка папка - назвать его как - listgrad.xml для экс) может выглядеть следующим образом:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="@color/gradient_start"
android:endColor="@color/gradient_end"
android:angle="-270" />
</shape>
вы бы добавить его в макет для вашего списка элемента (расположение .xml файл, который вы определите для этого), как этот фрагмент кода:
<TextView
android:id="@+id/ranking_order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/list_grad"
/>
...
Только текст должен иметь градиент, а не весь текст ... –
Почему два ответа здесь? –
это не представляется возможным расширить TextView нарисовать текст с градиентом. Однако достичь этого эффекта можно, создав холст и опираясь на него. Сначала нам нужно объявить наш пользовательский элемент интерфейса. В начале нам нужно создать подкласс Layout. В этом случае мы будем использовать BoringLayout, который поддерживает только текст с одной строкой.
Shader textShader=new LinearGradient(0, 0, 0, 20,
new int[]{bottom,top},
new float[]{0, 1}, TileMode.CLAMP);//Assumes bottom and top are colors defined above
textPaint.setTextSize(textSize);
textPaint.setShader(textShader);
BoringLayout.Metrics boringMetrics=BoringLayout.isBoring(text, textPaint);
boringLayout=new BoringLayout(text, textPaint, 0, Layout.Alignment.ALIGN_CENTER,
0.0f, 0.0f, boringMetrics, false);
Мы тогда переопределить onMeasure и OnDraw:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
setMeasuredDimension((int) textPaint.measureText(text), (int) textPaint.getFontSpacing());
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
boringLayout.draw(canvas);
}
Наша реализация OnDraw в этот момент довольно ленивым (он полностью игнорирует спецификации измерения !, но так долго, как вы гарантировать, что точка зрения
В качестве альтернативы можно было бы наследовать от Canvas и переопределить метод onPaint. Если это будет сделано, то, к сожалению, якорь для рисованного текста всегда будет внизу, поэтому мы должны объявить d -textPaint.getFontMetricsInt(). ascent() для нашей координаты y.
Но как это сделать с моим градиентом XML-файла? –
Это ссылка решает ваш запрос:
Он использовал LinearGradient класс, чтобы создать шейдер, который установлен на текстовом
Пожалуйста, обратитесь это [1]: HTTP: //stackoverflow.com/questions/2680607/text-with-gradient-in-android Я думаю, это поможет вам. –
@pankaj Нет, это не дубликат. Мне нужно сделать это, используя градиент XML, а не градиент кода Java! –