অ্যান্ড্রয়েড ভিউ ছায়া


104

আমি আশেপাশে অনুসন্ধান করেছি এবং এটি করার কোনও সঠিক উপায় আমি খুঁজে পাইনি। আমি আমার মতামতগুলিতে নিম্নলিখিত ছায়া প্রভাব রাখতে চাই: এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

সত্যি কথা বলতে কি, আমি জানি না যে এই দ্বিতীয়টি ছায়া প্রভাব প্রয়োগ করে করা হয়েছে কিনা। কোন ধারনা?


4
তুমি এটা বুজাচ্ছো? stackoverflow.com/questions/4406524/… (সর্বাধিক ভোটের উত্তরটি দেখুন, চিহ্নিত উত্তর নয়)
লুক ভিও

4
@ ডাটভিএম, ধন্যবাদ, এটি কৌশলটি করার মতো মনে হচ্ছে, তবে আমি ভাবছিলাম যে অ্যান্ড্রয়েড এসডিকে সরঞ্জামগুলি অন্তর্নির্মিত রয়েছে। উদাহরণস্বরূপ, কিছু কোডের লাইন যুক্ত করে লিনিয়ার লেআউটগুলির জন্য ড্রপ ছায়া যুক্ত করা: পি
লংওয়াকার 13

একই প্রশ্ন - stackoverflow.com/q/52954743/9640177 - ভেক্টর অঙ্কনযোগ্য করার ছায়া যোগ
mayank1513

উত্তর:


158

আমি জানি এই প্রশ্ন থেকেই উত্তর করা হয়েছে কিন্তু আমি তোমাদের আমি দেখেছি যে একটি জানতে চাই drawableউপর Android Studioযে খুব ছবি আপনি প্রশ্ন আছে অনুরূপ: এই কটাক্ষপাত:

android:background="@drawable/abc_menu_dropdown_panel_holo_light"

দেখে মনে হচ্ছে:

এখানে চিত্র বর্ণনা লিখুন

আশা করি এটি সহায়ক হবে

সম্পাদনা করুন

উপরের বিকল্পটি পুরানো সংস্করণগুলির জন্য Android Studioযাতে আপনি এটি নাও পেতে পারেন। আরও নতুন সংস্করণের জন্য:

android:background="@android:drawable/dialog_holo_light_frame"

তদুপরি, আপনি যদি নিজের কাস্টম শেপটি পেতে চান তবে আমি Photoshopএটির মতো একটি অঙ্কন সফ্টওয়্যার ব্যবহার করার পরামর্শ দিই ।

এখানে চিত্র বর্ণনা লিখুন

এটিকে .9.pngফাইল হিসাবে সংরক্ষণ করতে ভুলবেন না (উদাহরণ my_background.9.png:)

ডকুমেন্টেশন পড়ুন: 9-প্যাচ আঁকুন

সম্পাদনা 2

এমনকি আরও ভাল এবং কম পরিশ্রমী সমাধান হ'ল সীমানাকে ওভারল্যাপ করার জন্য ভিউগুলি রোধ করতে একটি CardViewএবং সেট ব্যবহার করা app:cardPreventCornerOverlap="false":

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardCornerRadius="2dp"
    app:cardElevation="2dp"
    app:cardPreventCornerOverlap="false"
    app:contentPadding="0dp">

    <!-- your layout stuff here -->

</android.support.v7.widget.CardView>

এছাড়াও build.gradle, বর্তমানের মধ্যে সর্বশেষতম সংস্করণ অন্তর্ভুক্ত করেছেন তা নিশ্চিত করুন

compile 'com.android.support:cardview-v7:26.0.0'

ধন্যবাদ, আসলে, এটি দেখতে খুব সাদৃশ্যপূর্ণ। আমি অ্যান্ড্রয়েডের জন্য "গুগল কার্ড লেআউট "ও পেয়েছি এবং সেগুলি দুর্দান্ত!
দীর্ঘদেহী

6
অসাধারণ. ভবিষ্যতের দর্শকদের জন্য কেবল একটি এফওয়াইআই, এটি রয়েছে /<sdk-path>/extras/android/support
theblang

4
কী ব্যবহার করবেনcardView
অ্যালেক্স চেনগালান

100

আমি অ্যান্ড্রয়েড স্টুডিও 0.8.6 ব্যবহার করছি এবং আমি এটি খুঁজে পেলাম না:

android:background="@drawable/abc_menu_dropdown_panel_holo_light"

সুতরাং আমি এটি পরিবর্তে খুঁজে পেয়েছি:

android:background="@android:drawable/dialog_holo_light_frame"

এবং এটি এর মতো দেখাচ্ছে:

এখানে চিত্র বর্ণনা লিখুন


4
তবে আমরা এর সাথে কোণার ব্যাসার্ধ যুক্ত করতে পারি না ?!
Fay007

40

এর ব্যাকগ্রাউন্ড স্থাপন @android:drawable/dialog_holo_light_frame, ছায়া দেয় তবে আপনি ব্যাকগ্রাউন্ডের রঙ বা সীমানার স্টাইল পরিবর্তন করতে পারবেন না, সুতরাং এটির ছায়া থেকে উপকৃত হওয়া আরও ভাল, তবুও স্তর-তালিকার মাধ্যমে একটি ব্যাকগ্রাউন্ড রাখতে সক্ষম হবেন

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--the shadow comes from here-->
    <item
        android:bottom="0dp"
        android:drawable="@android:drawable/dialog_holo_light_frame"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp">

    </item>

    <item
        android:bottom="0dp"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp">
        <!--whatever you want in the background, here i preferred solid white -->
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />

        </shape>
    </item>
</layer-list>

বলার মতো এটি আঁকতে সক্ষম ফোল্ডারে সংরক্ষণ করুন shadow.xml

এটি একটি ভিউতে নির্ধারণ করতে, এক্সএমএল লেআউট ফাইলটিতে এর ব্যাকগ্রাউন্ড সেট করে

android:background="@drawable/shadow"

এটি কাজ করে কিনা তা পরীক্ষা করে দেখেছেন? দ্বিতীয় <item> কিছুই করে না। আমি এটিকে স্বচ্ছ বা বৃত্তাকার কোণে পরিবর্তন করতে পারি না।
জিশান

4
আমি যা চেষ্টা করেছি তার মধ্যে একমাত্র কাজটি হ'ল ধন্যবাদ।
শ্যাম সুন্দর

4
চমত্কার সমাধান
ব্যবহারকারী 1974368

36

নিম্নলিখিত কোড সহ পুনরায় / অঙ্কনযোগ্য ফোল্ডারে কার্ড_ব্যাকগ্রাউন্ড.এক্সএমএল তৈরি করুন:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape android:shape="rectangle">
        <solid android:color="#BDBDBD"/>
        <corners android:radius="5dp"/>
    </shape>
</item>

<item
    android:left="0dp"
    android:right="0dp"
    android:top="0dp"
    android:bottom="2dp">
    <shape android:shape="rectangle">
        <solid android:color="#ffffff"/>
        <corners android:radius="5dp"/>
    </shape>
</item>
</layer-list>

তারপরে আপনি যে উপাদানটিতে কার্ডের বিন্যাস চান সেটিতে নীচের কোডটি যুক্ত করুন

android:background="@drawable/card_background"

নিম্নলিখিত লাইন কার্ডের জন্য ছায়ার রঙ নির্ধারণ করে

<solid android:color="#BDBDBD"/>

10
এটি আসলে ছায়া নয় - কারণ এটি বিবর্ণ হয় না। এটি আরও দুটি পাশের সীমানার মতো।
নিষিদ্ধ-জিওঞ্জিনিয়ারিং

এটি কোনও ছায়া নয়
শেডটিড

24

কার্ডভিউ আপনাকে অ্যান্ড্রয়েড 5+ এ সত্য ছায়া দেয় এবং এটিতে একটি সমর্থন লাইব্রেরি রয়েছে। এটির সাথে আপনার দৃষ্টিভঙ্গিটি কেবল জড়িয়ে দিন এবং আপনি শেষ করেছেন।

<android.support.v7.widget.CardView>
     <MyLayout>
</android.support.v7.widget.CardView>

এটি পরবর্তী নির্ভরতা প্রয়োজন।

dependencies {
    ...
    compile 'com.android.support:cardview-v7:21.0.+'
}

4
এটি একমাত্র সঠিক উত্তর, যেহেতু CardViewকমপ্যাট মোডে বিভিন্ন উচ্চতার জন্য কেবল ছায়ার স্তরও বিভিন্ন।
জ্যারেট মিল্লার্ড

আমি মেট্রিকালকার্ডভিউকে সুপারিশ করছি যেহেতু এটি পরিষ্কার হয় এবং এর আরও ক্ষমতা রয়েছে।
এইচ ফরিদ


12

এটি দেরিতে হতে পারে তবে যারা এখনও এর উত্তর খুঁজছেন তাদের জন্য আমি গিট হাবের জন্য একটি প্রকল্প পেয়েছি এবং এটি কেবলমাত্র আমার প্রয়োজনের সাথে খাপ খায়। অ্যান্ড্রয়েড-মেটালশডাউনাইনপ্যাচ

আপনার বিল্ডড্রেডল নির্ভরতাতে এই লাইনটি কেবল যুক্ত করুন

compile 'com.h6ah4i.android.materialshadowninepatch:materialshadowninepatch:0.6.3'

চিয়ার্স থাম্বস অব স্রষ্টার! হ্যাপি কোডিংস


আরে @ralphgabb, এটি কি এখনও আপনার পক্ষে ভাল কাজ করে বা আপনার কাছে প্রাক ললিপপ ডিভাইসের জন্য আরও ভাল সমাধান রয়েছে?
স্বপ্নিল

@ সপ্নিল নিশ্চিত নয় যে অ্যান্ড্রয়েডএক্স এখন এটি সমর্থন করে কিনা আমি এখন আর প্রি-মার্শমেলো ডিভাইসগুলিকে সমর্থন করি না।
ralphgabb

7

আমি জানি এটি নির্বুদ্ধিতা হ্যাকি,
তবে আপনি যদি ভি 21 এর অধীনে সমর্থন করতে চান তবে আমার অর্জনগুলি এখানে।

আয়তক্ষেত্র_সহ_০ ডিপি_রাডিয়াস_ সাদা_বিজি_আর_শাদো.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Shadow layers -->
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_1" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_2" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_3" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_4" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_5" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_6" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_7" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_8" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_9" />
        </shape>
    </item>
    <item
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape>
            <corners android:radius="10dp" />
            <padding
                android:bottom="1.8dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="@color/shadow_hack_level_10" />
        </shape>
    </item>

    <!-- Background layer -->
    <item>
        <shape>
            <solid android:color="@android:color/white" />
            <corners android:radius="10dp" />
        </shape>
    </item>

</layer-list>

আয়তক্ষেত্র_সহ_০ ডিপি_রাডিয়াস_ হোয়াইট_বিজি_এন্ড_শাদো.এক্সএমএল (ভি 21)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/white" />
    <corners android:radius="10dp" />
</shape>

ভিউ_ ইনকামিং.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/rectangle_with_10dp_radius_white_bg_and_shadow"
    android:elevation="7dp"
    android:gravity="center"
    android:minWidth="240dp"
    android:minHeight="240dp"
    android:orientation="horizontal"
    android:padding="16dp"
    tools:targetApi="lollipop">

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="Hello World !" />

</LinearLayout>

ফলাফল এখানে:

ভি 21 এর অধীনে (এটি যা আপনি এক্সএমএল দিয়ে তৈরি করেছেন) এখানে চিত্র বর্ণনা লিখুন

ভি 21 এর উপরে (বাস্তব উচ্চতা উপস্থাপনা) এখানে চিত্র বর্ণনা লিখুন

  • একটি উল্লেখযোগ্য পার্থক্য হ'ল এটি দৃশ্য থেকে অভ্যন্তরীণ স্থান দখল করবে যাতে আপনার প্রকৃত সামগ্রীর ক্ষেত্রটি > = ললিপপ ডিভাইসের চেয়ে ছোট হতে পারে ।

4

আপনি যদি যথাযথভাবে প্রয়োগ করতে ছায়াগুলির প্রয়োজন হয় তবে আপনাকে নিম্নলিখিতগুলি করতে হবে।

এই দৃশ্যটি বিবেচনা করুন, একটি পটভূমি অঙ্কনযোগ্য দ্বারা সংজ্ঞায়িত:

<TextView
    android:id="@+id/myview"
    ...
    android:elevation="2dp"
    android:background="@drawable/myrect" />

পটভূমি অঙ্কনযোগ্য গোলাকার কোণগুলির সাথে একটি আয়তক্ষেত্র হিসাবে সংজ্ঞায়িত:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="#42000000" />
    <corners android:radius="5dp" />
</shape>

ছায়াগুলি প্রয়োগের এটি পুনরায় সংস্থাপিত উপায় এটি চেক আউট https://developer.android.com/training/matory/shadows-clipping.html# শ্যাডো দেখুন


2

প্রভাব ছায়া জন্য উন্নত সম্পত্তি ব্যবহার করুন:

<YourView
    ...
    android:elevation="3dp"/>

এলিভেশন ব্যবহারের জন্য ডিভাইসটি ললিপপ চালানো দরকার।
শেন রোওট

2

বৃত্তাকার ছায়া দেখানোর জন্য পটভূমির মতো অঙ্কনযোগ্য তৈরি করুন।

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Drop Shadow Stack -->
    <item>
        <shape>
            <corners android:radius="4dp" />
            <padding android:bottom="1dp" android:left="1dp"
                     android:right="1dp"  android:top="1dp" />
            <solid android:color="#00CCCCCC" />
        </shape>
    </item>
    <item>
        <shape>
            <corners android:radius="4dp" />
            <padding android:bottom="1dp" android:left="1dp"
                     android:right="1dp"  android:top="1dp" />
            <solid android:color="#10CCCCCC" />
        </shape>
    </item>
    <item>
        <shape>
            <corners android:radius="4dp" />
            <padding android:bottom="1dp" android:left="1dp"
                     android:right="1dp"  android:top="1dp" />
            <solid android:color="#20d5d5d5" />
        </shape>
    </item>
    <item>
        <shape>
            <corners android:radius="6dp" />
            <padding android:bottom="1dp" android:left="1dp"
                     android:right="1dp"  android:top="1dp" />
            <solid android:color="#30cbcbcb" />
        </shape>
    </item>
    <item>
        <shape>
            <corners android:radius="4dp" />
            <padding android:bottom="1dp" android:left="1dp"
                     android:right="1dp"  android:top="1dp" />
            <solid android:color="#50bababa" />
        </shape>
    </item>

    <!-- Background -->
    <item>
        <shape>
            <solid android:color="@color/gray_100" />
            <corners android:radius="4dp" />
        </shape>
    </item>
</layer-list>

আপনি যে সরবরাহ করেছেন তার কোডের জন্যও বিবরণ যুক্ত করুন।
মঙ্গলদীপ পান্নু

খুব সুন্দর এক্সএমএল একমাত্র সমাধান
ব্রুনো বিয়েরি

2

এই প্রশ্নটি পুরানো হতে পারে তবে ভবিষ্যতে যে কেউ জটিল ছায়ার প্রভাব অর্জনের জন্য সহজ উপায় চান আমার লাইব্রেরিটি এখানে দেখুন https://github.com/BluRe-CN/ComplexView

লাইব্রেরিটি ব্যবহার করে, আপনি ছায়ার রঙ পরিবর্তন করতে পারেন, প্রান্তগুলি আরও ভাল করতে পারেন এবং আরও অনেক কিছু। আপনি যা খুঁজছেন তা অর্জন করার জন্য এখানে একটি উদাহরণ দেওয়া আছে।

<com.blure.complexview.ComplexView
        android:layout_width="400dp"
        android:layout_height="600dp"
        app:radius="10dp"
        app:shadow="true"
        app:shadowSpread="2">

        <com.blure.complexview.ComplexView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:color="#fdfcfc"
            app:radius="10dp" />
    </com.blure.complexview.ComplexView>

ছায়ার রঙ পরিবর্তন করতে, অ্যাপ্লিকেশনটি ব্যবহার করুন: ছায়া রঙ = "আপনার রঙের কোড"।


1

এই আকারটি পটভূমি হিসাবে ব্যবহার করুন:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@android:drawable/dialog_holo_light_frame"/>

    <item>
        <shape android:shape="rectangle">
            <corners android:radius="1dp" />
            <solid android:color="@color/gray_200" />
        </shape>
    </item>

</layer-list>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.