অ্যান্ড্রয়েড লিনিয়ারলআউট গ্রেডিয়েন্ট পটভূমি


246

লিনিয়ারলআউটে গ্রেডিয়েন্ট পটভূমি প্রয়োগ করতে আমার সমস্যা হচ্ছে।

আমি যা পড়েছি তার থেকে এটি তুলনামূলক সহজ হওয়া উচিত তবে এটি কেবল কাজ করে বলে মনে হচ্ছে না। রেফারেন্সের জন্য আমি ২.১-আপডেট ১ এ বিকাশ করছি।

header_bg.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="90"
        android:startColor="#FFFF0000"
        android:endColor="#FF00FF00"
        android:type="linear"/>
</shape>

main_header.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    android:orientation="horizontal"
    android:background="@drawable/header_bg">
</LinearLayout>

যদি আমি @ অঙ্কনযোগ্য / শিরোনাম_বিজিটিকে কোনও রঙে পরিবর্তন করি - যেমন # FF0000 এটি পুরোপুরি সূক্ষ্মভাবে কাজ করে। আমি কি এখানে স্পষ্ট কিছু মিস করছি?


অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ডসিন্ট অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড টিন্টমোড স্ট্যাকওভারফ্লো.com
প্রমোদ গার্গ

উত্তর:


406

ঠিক আছে আমি একটি নির্বাচক ব্যবহার করে এটি সমাধান করতে পেরেছি। নীচে কোড দেখুন:

main_header.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    android:orientation="horizontal"
    android:background="@drawable/main_header_selector">
</LinearLayout>

main_header_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape>
        <gradient
            android:angle="90"
            android:startColor="#FFFF0000"
            android:endColor="#FF00FF00"
            android:type="linear" />
    </shape>
</item>
</selector>

আশা করি এটি একই সমস্যা এমন কাউকে সহায়তা করে helps


5
গ্রেট। এফওয়াইআই, অন্যান্য গ্রেডিয়েন্ট প্রকারগুলি দেখুন: বিকাশকারী.অ্যান্ড্রয়েড
রেফারেন্স

86

তৃতীয় রঙ (কেন্দ্র) থাকাও সম্ভব। এবং বিভিন্ন ধরণের আকার।

উদাহরণস্বরূপ অঙ্কনযোগ্য / গ্রেডিয়েন্ট.এক্সএমএল:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#000000"
        android:centerColor="#5b5b5b"
        android:endColor="#000000"
        android:angle="0" />
</shape>

এটি আপনাকে কালো - ধূসর - কালো (বাম থেকে ডান) দেয় যা আমার প্রিয় অন্ধকার ব্যাকগ্রাউন্ড এটিএম।

আপনার লেআউট এক্সএমএলে ব্যাকগ্রাউন্ড হিসাবে গ্রেডিয়েন্ট.এক্সএমএল যুক্ত করতে ভুলবেন না:

android:background="@drawable/gradient"

এটি ঘোরানোও সম্ভব:

কোণ = "0"

আপনাকে একটি উল্লম্ব রেখা দেয়

এবং সাথে

কোণ = "90"

আপনাকে একটি অনুভূমিক রেখা দেয়

সম্ভাব্য কোণগুলি হ'ল:

0, 90, 180, 270।

এছাড়াও বিভিন্ন ধরণের আকার রয়েছে:

অ্যান্ড্রয়েড: SHAPE = "আয়তক্ষেত্র"

বৃত্তাকার আকার:

অ্যান্ড্রয়েড: SHAPE = "ডিম্বাকৃতি"

এবং সম্ভবত আরও কিছু।

আশা করি এটি সাহায্য করবে, চিয়ার্স!


40

এক্সএমএল অঙ্কনযোগ্য ফাইলটিতে:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient android:angle="90"
                android:endColor="#9b0493"
                android:startColor="#38068f"
                android:type="linear" />
        </shape>
    </item>
</selector>

আপনার লেআউট ফাইলটিতে: অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড = "@ অঙ্কনযোগ্য / গ্রেডিয়েন্ট_ব্যাকগ্রাউন্ড"

  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/gradient_background"
        android:orientation="vertical"
        android:padding="20dp">
        .....

</LinearLayout>

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


হাই, আপনি কীভাবে স্বচ্ছ স্ট্যাটাস বার অর্জন করলেন? যদি আমি styles.xml এটা স্বচ্ছ সেট এটা কালো হয়ে ..
kironet

21

অ্যান্ড্রয়েড অপসারণের চেষ্টা করুন: গ্রেডিয়েন্টরিডিয়াস = "90"। এখানে আমার জন্য কাজ করা এক:

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
>
    <gradient
        android:startColor="@color/purple"
        android:endColor="@color/pink"
        android:angle="270" />
</shape>

দুর্ভাগ্যক্রমে এটি আমার পক্ষে কাজ করছে না। আমি এখন যা আছে তা দিয়ে আমি মূল প্রশ্নটি আপডেট করেছি।
আদিপুস্তক

আপনি লেআউটে কোনও উইজেট যুক্ত করার পরেও এটি কার্যকর হয় না (উদাহরণস্বরূপ কোনও টেক্সটভিউ?
ভিনসেন্ট মিমাউন-প্রট

সঠিক - এটি এখনও লেআউটের ভিতরে কোনও টেক্সটভিউয়ের সাথে কাজ করে না। আবার, আমি যদি একটি অঙ্কনযোগ্যের চেয়ে স্থির রঙ প্রয়োগ করি তবে এটি ঠিক কাজ করে। একটি জিনিস আমি লক্ষ্য করেছি যে আমি (কখনও কখনও) এটি কোনও নির্বাচক ব্যবহার করে কাজ করতে পারি তবে এটি আমার বোঝার থেকে প্রয়োজন হবে না।
আদিপুস্তক

6

আমার সমস্যাটি ছিল .xML এক্সটেনশনটি নতুন নির্মিত এক্সএমএল ফাইলের ফাইল নামটিতে যুক্ত করা হয়নি। .XML এক্সটেনশান যুক্ত করা আমার সমস্যাটি স্থির করে।


3

কোটলিনের সাহায্যে আপনি এটি কেবল 2 লাইনেই করতে পারেন

অ্যারে রঙের মান পরিবর্তন করুন

                  val gradientDrawable = GradientDrawable(
                        GradientDrawable.Orientation.TOP_BOTTOM,
                        intArrayOf(Color.parseColor("#008000"),
                                   Color.parseColor("#ADFF2F"))
                    );
                    gradientDrawable.cornerRadius = 0f;

                   //Set Gradient
                   linearLayout.setBackground(gradientDrawable);

ফলাফল

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


1

এটি কারও সাহায্য করবে কিনা তা আমি জানি না, তবে আমার সমস্যাটি হ'ল আমি এই জাতীয় চিত্রাবলীর "src" বৈশিষ্ট্যে গ্রেডিয়েন্টটি সেট করার চেষ্টা করছিলাম:

<ImageView 
    android:id="@+id/imgToast"
    android:layout_width="wrap_content"
    android:layout_height="60dp"
    android:src="@drawable/toast_bg"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"/>

এটি কেন কাজ করে না তা 100% নিশ্চিত নয় তবে এখন আমি এটি পরিবর্তন করেছি এবং চিত্রকল্পের পিতামাতার "ব্যাকগ্রাউন্ড" সম্পত্তিটিতে অঙ্কনযোগ্যটি রেখেছি, যা আমার ক্ষেত্রে আপেক্ষিক লেআউট, যেমন: (এটি সফলভাবে কাজ করেছে)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/custom_toast_layout_id"
    android:layout_height="match_parent"
    android:background="@drawable/toast_bg">

0

আমি আপনার গ্রেডিয়েন্ট রঙগুলিতে আপনার আলফা চ্যানেলটি পরীক্ষা করব। আমার জন্য, যখন আমি আমার কোডটি পরীক্ষা করছিলাম তখন আমি আলফা চ্যানেলটির রঙগুলিতে ভুল সেট করেছিলাম এবং এটি আমার পক্ষে কার্যকর হয়নি। একবার আমি আলফা চ্যানেল সেট হয়ে গেলাম এটি সব কাজ করে!


0

এটি করতে আপনি একটি কাস্টম ভিউ ব্যবহার করতে পারেন। এই সমাধানের সাহায্যে এটি আপনার প্রকল্পের সমস্ত রঙের গ্রেডিয়েন্ট আকারগুলি শেষ করেছে:

class GradientView(context: Context, attrs: AttributeSet) : View(context, attrs) {

    // Properties
    private val paint: Paint = Paint()
    private val rect = Rect()

    //region Attributes
    var start: Int = Color.WHITE
    var end: Int = Color.WHITE
    //endregion

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)
        // Update Size
        val usableWidth = width - (paddingLeft + paddingRight)
        val usableHeight = height - (paddingTop + paddingBottom)
        rect.right = usableWidth
        rect.bottom = usableHeight
        // Update Color
        paint.shader = LinearGradient(0f, 0f, width.toFloat(), 0f,
                start, end, Shader.TileMode.CLAMP)
        // ReDraw
        invalidate()
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        canvas.drawRect(rect, paint)
    }

}

আমি এই কাস্টম দর্শন সহ একটি ওপেন সোর্স প্রকল্প গ্রেডিয়েন্টভিও তৈরি করেছি :

https://github.com/lopspower/GradientView

implementation 'com.mikhaellopez:gradientview:1.1.0'

বেশ মজার তো. এটি Android এর পরবর্তী সংস্করণগুলির সাথে কাজ করে। অন্যান্য উত্তরগুলি নিয়ে এখন অবহেলিত
গাছ_রে_গ্রেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.