Android - тень на текст?
Мне интересно, как добавить тень в текст в андроиде?
У меня есть следующий код, который применяется к растровому изображению, и мне нужно было затенять...
paint.setColor(Color.BLACK);
paint.setTextSize(55);
paint.setFakeBoldText(false);
paint.setShadowLayer(1, 0, 0, Color.BLACK); //This only shadows my whole view...
Спасибо за советы!
Ответы
Ответ 1
Вы должны иметь возможность добавить стиль, как это (взято из исходного кода для Ringdroid):
<style name="AudioFileInfoOverlayText">
<item name="android:paddingLeft">4px</item>
<item name="android:paddingBottom">4px</item>
<item name="android:textColor">#ffffffff</item>
<item name="android:textSize">12sp</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">1</item>
</style>
И в вашем макете используйте стиль, подобный этому:
<TextView android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/AudioFileInfoOverlayText"
android:gravity="center" />
Изменить: исходный код можно посмотреть здесь: https://github.com/google/ringdroid
Edit2:
Чтобы установить этот стиль программно, вы бы сделали что-то вроде этого (изменено с в этом примере, чтобы соответствовать ресурсам ringdroid сверху)
TextView infoTextView = (TextView) findViewById(R.id.info);
infoTextView.setTextAppearance(getApplicationContext(),
R.style.AudioFileInfoOverlayText);
Подпись для setTextAppearance
равна
public void setTextAppearance (контекст контекста, int остаток)
С: API Level 1
Устанавливает цвет текста, размер, стиль, цвет подсказки и выделите цвет из указанного ресурса TextAppearance.
Ответ 2
Вы можете делать как код, так и XML. Только 4 основных элемента, которые нужно установить.
- теневой цвет
- Shadow Dx - определяет смещение тени X-оси. Вы можете указать значения -/+, где -Dx рисует тень слева от текста и + Dx справа.
- shadow Dy - определяет смещение тени Y-оси. -Dy указывает тень над текстом и + Dy указывает ниже текста.
- shadow radius - определяет, насколько тень должна быть размыта по краям. Предоставьте небольшое значение, если тень должна быть заметной. Иначе в противном случае.
например.
android:shadowColor="@color/text_shadow_color"
android:shadowDx="-2"
android:shadowDy="2"
android:shadowRadius="0.01"
Это рисует заметную тень на левой стороне текста.
В коде вы можете добавить что-то вроде этого:
TextView item = new TextView(getApplicationContext());
item.setText(R.string.text);
item.setTextColor(getResources().getColor(R.color.general_text_color));
item.setShadowLayer(0.01f, -2, 2, getResources().getColor(R.color.text_shadow_color));
Ответ 3
Если вы хотите получить тень, подобную той, которую делает Android в Launcher, мы управляем этими значениями. Они полезны, если вы хотите создать TextViews, который будет отображаться как виджет, без фона.
android:shadowColor="#94000000"
android:shadowDy="2"
android:shadowRadius="4"
Ответ 4
Нарисуйте 2 текста: один серый (это будет тень), а поверх него нарисуйте второй текст (координата y на 1px больше, чем теневой текст).
Ответ 5
<style name="WhiteTextWithShadow" parent="@android:style/TextAppearance">
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">1</item>
<item name="android:shadowColor">@android:color/black</item>
<item name="android:textColor">@android:color/white</item>
</style>
то используйте
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
tools:text="Today, May 21"
style="@style/WhiteTextWithShadow"/>
Ответ 6
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="20dp" >
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:shadowColor="#000"
android:shadowDx="0"
android:shadowDy="0"
android:shadowRadius="50"
android:text="Text Shadow Example1"
android:textColor="#FBFBFB"
android:textSize="28dp"
android:textStyle="bold" />
<TextView
android:id="@+id/textview2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Text Shadow Example2"
android:textColor="#FBFBFB"
android:textSize="28dp"
android:textStyle="bold" />
</LinearLayout>
В приведенном выше коде макета XML textview1 задается с эффектом Shadow в макете. ниже приведены элементы конфигурации.
android: shadowDx - указывает смещение оси X по оси. Вы можете указать значения //, где -Dx рисует тень слева от текста и +Dx справа
android: shadowDy - задает смещение оси Y по оси. -Dy указывает тень над текстом, а +Dy указывает ниже текста.
android: shadowRadius - определяет, насколько тень должна быть размыта по краям. Предоставьте небольшое значение, если тень должна быть заметной. android: shadowColor - указывает цвет тени
Эффект тени на Android TextView прагматично
Используйте ниже фрагмент кода, чтобы получить эффект тени во втором TextView прагматично.
TextView textv = (TextView) findViewById(R.id.textview2);
textv.setShadowLayer(30, 0, 0, Color.RED);
Вывод :
![enter image description here]()