Android - पाठ पर छाया?


184

मैं सोच रहा हूं कि एंड्रॉइड में टेक्स्ट पर छाया कैसे जोड़ें?

मेरे पास निम्नलिखित कोड है जो एक बिटमैप पर लागू होता है और मैं छायांकित होना चाहता था ...

paint.setColor(Color.BLACK);
paint.setTextSize(55);
paint.setFakeBoldText(false);
paint.setShadowLayer(1, 0, 0, Color.BLACK); //This only shadows my whole view...

2
ध्यान रखें कि आपके पास शैडोराडियस होना चाहिए।

2
आपको सही उत्तर के रूप में छोड़ा गया उत्तर @fhucho चिह्नित करना चाहिए; मैं वही काम करने की कोशिश कर रहा था और पहली बार इस पोस्ट को देखने से चूक गया, क्योंकि कोई भी उत्तर सही नहीं था। कई बार उत्तर दिया गया यह भ्रामक है, क्योंकि यह छाया को प्रोग्रामेटिक रूप से जोड़ने से संबंधित नहीं है।
areyling

जवाबों:


390

आपको इस तरह की शैली जोड़ने में सक्षम होना चाहिए (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है

सार्वजनिक शून्य सेटटैक्सपैरेंस (संदर्भ, इंट रेज)

चूँकि: API Level 1
निर्दिष्ट TextAppearance संसाधन से पाठ का रंग, आकार, शैली, संकेत रंग और हाइलाइट रंग सेट करता है।


1
लेकिन ओपी कस्टम विगेट्स के लिए पूछ रहा है!
HRJ

यह हो सकता है, लेकिन यह सुझाव देने के लिए कुछ भी नहीं है कि वह इस विधि का उपयोग एक ImageView पर नहीं कर सकता है। मैंने मान लिया कि वह सीधे पेंटिंग कर रहा था क्योंकि वह इसका पता नहीं लगा सकता था।
जिम स्कुबर्ट

भयानक ... मानक फ़ॉन्ट में बहुत आवश्यक गहराई जोड़ता है और यह एक ठोस पृष्ठभूमि पर 10X बेहतर दिखता है।
मैट के

@ फरहान यहां देखें: stackoverflow.com/questions/4630440/…
जिम शुबर्ट

2
वास्तव में मदद की, अंगूठे ऊपर भाई
साद बिलाल

72

आप कोड और XML दोनों में कर सकते हैं। केवल 4 बुनियादी चीजें निर्धारित की जानी हैं।

  1. छाया का रंग
  2. शैडो डीएक्स - यह छाया के एक्स-अक्ष ऑफसेट को निर्दिष्ट करता है। आप - / + मान दे सकते हैं, जहां -Dx पाठ के बाईं ओर छाया और दाईं ओर + Dx है
  3. छाया डाई - यह छाया के Y- अक्ष ऑफसेट को निर्दिष्ट करता है। -वह पाठ के ऊपर एक छाया निर्दिष्ट करता है और + डाई पाठ के नीचे निर्दिष्ट करता है।
  4. छाया त्रिज्या - निर्दिष्ट करता है कि किनारों पर छाया कितनी धुंधली होनी चाहिए। यदि छाया को प्रमुख बनाने की आवश्यकता है, तो एक छोटा मूल्य प्रदान करें। अन्यथा नहीं।

जैसे

    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));

7
<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 लेआउट में छाया प्रभाव के साथ दिया गया है। नीचे विन्यास आइटम हैं

Android: ShadowDx - छाया की X- अक्ष ऑफसेट निर्दिष्ट करता है। आप - / + मान दे सकते हैं, जहां -Dx पाठ के बाईं ओर छाया और दाईं ओर + Dx है

Android: shadowDy - यह छाया के Y- अक्ष ऑफसेट को निर्दिष्ट करता है। -वह पाठ के ऊपर एक छाया निर्दिष्ट करता है और + डाई पाठ के नीचे निर्दिष्ट करता है।

Android: shadowRadius - निर्दिष्ट करता है कि किनारों पर छाया कितनी धुंधली होनी चाहिए। यदि छाया को प्रमुख बनाने की आवश्यकता है, तो एक छोटा मूल्य प्रदान करें। Android: shadowColor - छाया रंग निर्दिष्ट करता है


Android TextView पर छाया प्रभाव व्यावहारिक रूप से

दूसरे टेक्स्ट व्यू पर व्यावहारिक रूप से छाया प्रभाव प्राप्त करने के लिए कोड स्निपेट का उपयोग करें।

TextView textv = (TextView) findViewById(R.id.textview2);
textv.setShadowLayer(30, 0, 0, Color.RED);        

आउटपुट:

यहां छवि विवरण दर्ज करें


3

यदि आप उस छाया की तरह एक छाया प्राप्त करना चाहते हैं जो एंड्रॉइड लॉन्चर में करता है, तो हम इन मूल्यों को प्रबंधित कर रहे हैं। वे उपयोगी हैं यदि आप TextViews बनाना चाहते हैं जो एक पृष्ठभूमि के बिना एक विजेट के रूप में दिखाई देगा।

android:shadowColor="#94000000"
android:shadowDy="2"
android:shadowRadius="4"

2

2 ग्रंथों को ड्रा करें: एक ग्रे (यह छाया होगा) और इसके ऊपर दूसरा पाठ (y समन्वय 1px अधिक फिर छाया छाया) खींचें।


1
आपकी पोस्ट के लिए धन्यवाद दोस्तों। मैंने इसे दो पेंट ऑब्जेक्ट्स का उपयोग करके और पेंट-ऑब्जेक्ट में से किसी एक पर setShadaowLayer का उपयोग करके हल किया।
ग्रेंडलाइज़र

2
यदि आप अल्फ़ा का उपयोग करते हैं तो यह ठीक लग सकता है, लेकिन अच्छा, मुलायम, घोषित-रूप से छाया की तरह नहीं दिखेगा।
शिबिबुकी

2
 <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"/>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.