অ্যান্ড্রয়েডে প্রগতি বারের অগ্রগতির রঙ কীভাবে পরিবর্তন করবেন


473

আমি আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে অনুভূমিক অগ্রগতি বারটি ব্যবহার করছি এবং আমি এর অগ্রগতির রঙ (যা ডিফল্টরূপে হলুদ) পরিবর্তন করতে চাই। আমি কীভাবে এটি ব্যবহার করতে পারি code(এক্সএমএল নয়)?


আপনি কি মাইপ্রোগ্রেসবার.সেটপ্রোগ্রেসড্র্যাবেবল (ড্রয়যোগ্য ডি) আপনার পছন্দ মতো রঙের সাথে একটি বিটম্যাপ নির্দিষ্ট করে চেষ্টা করেছেন? developer.android.com/reference/android/widget/... developer.android.com/reference/android/graphics/drawable/...
fupsduck

2
হ্যাঁ আমি চেষ্টা করেছি কিন্তু কাজ করে না। এটি কেবলমাত্র বারের পটভূমির রঙ সেট করার পরিবর্তে পুরো অগ্রগতি বারের ব্যাকগ্রাউন্ডের রঙ সেট করে। ধন্যবাদ।
হোয়াইটটাইগারK

21
android:indeterminateTint="@android:color/white"কেবল এপিআই> = 21
ম্যাডিয়েডেক্সেটার

উত্তর:


290

আমি দুঃখিত যে এটি উত্তর নয়, তবে কোড থেকে সেটি নির্ধারণের প্রয়োজনীয়তাটি কী? আর .setProgressDrawableকাজ করা উচিত এটি সঠিকভাবে সংজ্ঞায়িত হলে

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@android:id/background">
    <shape>
        <corners android:radius="5dip" />
        <gradient
                android:startColor="#ff9d9e9d"
                android:centerColor="#ff5a5d5a"
                android:centerY="0.75"
                android:endColor="#ff747674"
                android:angle="270"
        />
    </shape>
</item>

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#80ffd300"
                    android:centerColor="#80ffb600"
                    android:centerY="0.75"
                    android:endColor="#a0ffcb00"
                    android:angle="270"
            />
        </shape>
    </clip>
</item>

<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners
                android:radius="5dip" />
            <gradient
                android:startColor="@color/progress_start"
                android:endColor="@color/progress_end"
                android:angle="270" 
            />
        </shape>
    </clip>
</item>

</layer-list>

4
কারণটি হ'ল আমি গতিশীলভাবে অগ্রগতি বারটি তৈরি করছি এবং ব্যবহারকারীর অনুরোধের ভিত্তিতে এর রঙ নির্ধারণ করছি। যেহেতু আমি সাধারণত আমার জিইউআই স্ক্রিন এবং উপাদানগুলি তৈরির জন্য কোড ব্যবহার করি, তাই আমি সংযুক্ত এক্সএমএলটির সাথে পরিচিত নই এবং একটি স্তর-তালিকা কী তা আমি জানি না (যদিও আমি অনুমান করছি যে আপনি বেশ কয়েকটি স্তরের ভিত্তিতে অগ্রগতি বারটি তৈরি করছেন) ..)। আপনি যে এক্সএমএলটি সংযুক্ত করেছেন সে ক্ষেত্রে আমি কীভাবে ব্যবহার করতে চাই - প্রজেক্টের ফোল্ডারে আমি এটি কোথায় রাখব এবং এক্সএমএল সেটিংসের উপর ভিত্তি করে একটি অগ্রগতি বার তৈরি করার জন্য আমার আরও কিছু করার দরকার আছে? ধন্যবাদ।
হোয়াইটটাইগারK

1
আপনি এই এক্সএমএলটিকে ফাইল হিসাবে সংরক্ষণ করুন এবং মাইপ্রোগ্রেসবারে সেট-প্রোগ্রেসড্রেইবল () রঙ পরিবর্তন করতে () এর পরিবর্তে এটি আঁকুন ফোল্ডারে রেখে দিন (My_progress.xML বলুন) রং পরিবর্তন করার জন্য - আপনাকে সেই মানগুলি @ রঙ / এ পরিবর্তন করতে হবে অগ্রগতি_স্টার্ট @ রঙ / অগ্রগতি_এটি মূলত একটি গ্রেডিয়েন্ট এবং আপনি সেখানে হেক্স লাগাতে পারেন।
অ্যালেক্স ভলভয়

3
দ্রষ্টব্য - ফাইল হ'ল এসডিকে থাকা একটির অনুলিপি। আমি কপিরাইট এখানে ফেলেছি। আপনি যদি রেজ / ড্রয়যোগ্য ফোল্ডারে তাকান তবে আপনি ঠিক কী পোস্ট করেছেন তা দেখতে পাবেন - রঙগুলি কাস্টম রঙের পরিবর্তে হলুদ গ্রেডিয়েন্টে সেট করা আছে।
অ্যালেক্স ভলভয়

7
এটি আমার কাছে কোনও রঙ পরিবর্তন দেখায় না। যে রঙটি কাজ করেছে তা দয়া করে বলুন।
প্রবীণ

হাই অ্যালেক্স, আপনার উত্তরগুলি খুব সুন্দর। তবে, রানটাইমে কাস্টম অগ্রগতির চাকা রঙ পরিবর্তন করার চেষ্টা করা হচ্ছে। কিন্তু আমি পারিনি. দয়া করে, আমাকে আমার সমস্যা সমাধানের জন্য সাহায্য .. পর উন্নতি reaches100% তারপর যে সময় পরিবর্তন রঙ এবং এই থেকে progress..i ডাউনলোড কোড শুরু .. stackoverflow.com/questions/18503718/...
harikrishnan

485

অনুভূমিক অগ্রগতি বারের জন্য, আপনি এর মতো একটিও ব্যবহার করতে পারেন ColorFilter:

progressBar.getProgressDrawable().setColorFilter(
    Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);

রঙিন ফিল্টার ব্যবহার করে লাল অগ্রগতি বার

দ্রষ্টব্য: এটি আপনার অ্যাপ্লিকেশনটিতে সমস্ত অগ্রগতি বারের উপস্থিতি পরিবর্তন করে। শুধুমাত্র একটি নির্দিষ্ট অগ্রগতি বার পরিবর্তন করতে, এটি করুন:

Drawable progressDrawable = progressBar.getProgressDrawable().mutate();
progressDrawable.setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(progressDrawable);

প্রগতিবার যদি অনির্দিষ্ট হয় তবে তার getIndeterminateDrawable()পরিবর্তে ব্যবহার করুন getProgressDrawable()

ললিপপ (এপিআই 21) যেহেতু আপনি একটি অগ্রগতির ছন্দ সেট করতে পারেন:

progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));

অগ্রগতি রঙ ব্যবহার করে রেড প্রগ্রেসবার


7
আমি এই উত্তরটি ব্যবহার করতে চেয়েছিলাম বলে মনে হয়েছিল যে এটি আমার কাছে সরলতম বলে মনে হচ্ছে তবে আমার অগ্রগতি বারটি অগ্রগতির মূল্য থেকে সম্পূর্ণ স্বাধীন। আপনি কি মোডটি ব্যবহারের বিষয়ে নিশ্চিত?
এলজি

33
@ রেসাস আমার একই সমস্যা রয়েছে, বারটি পুরো লাল ছিল এবং কোনও অগ্রগতি দৃশ্যমান ছিল না। তবে আমি এটি মোড.এসআরসিএনপি মোডে পরিবর্তন করার সমাধান করেছি UL বহুবার।
Derzu

40
আপনি getIndeterminateDrawableযদি অনির্দিষ্ট অগ্রগতি ব্যবহার করছেন তবে এটি করতে ভুলবেন না ।
থমি

6
এই প্রেক্ষাপটে পরামর্শ করা, 'মোড' android.graphics.PorterDuff.Mode বোঝায়
1owk3y

9
কিভাবে পটভূমি রঙ পরিবর্তন করবেন না? আমি কেবল অগ্রগতির রঙ পরিবর্তন করতে চাই।
ক্যাঙ্গিয়ার

364

এটি প্রোগ্রামগতভাবে নয় তবে আমি মনে করি এটি যাইহোক অনেক লোককে সহায়তা করতে পারে।
আমি অনেক চেষ্টা করেছি এবং সবচেয়ে কার্যকরী উপায় হ'ল .xML ফাইলটিতে আমার প্রগতিবারে এই লাইনগুলি যুক্ত করা:

            android:indeterminate="true"
            android:indeterminateTintMode="src_atop"
            android:indeterminateTint="@color/secondary"

সুতরাং শেষ পর্যন্ত এই কোডটি আমার জন্য এটি করেছে:

<ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_marginTop="50dp"
            android:layout_marginBottom="50dp"
            android:visibility="visible"
            android:indeterminate="true"
            android:indeterminateTintMode="src_atop"
            android:indeterminateTint="@color/secondary">

এই সমাধানটি API 21+ এর জন্য কাজ করে


45
ন্যূনতম এপিআই স্তরের 21
অ্যাপফেলস্যাফ্ট

এই বৈশিষ্ট্যগুলির জন্য সেটার পদ্ধতিও রয়েছে যা ডায়নামিক রঙ সেট করা থাকলে অবশ্যই বলা যেতে পারে।
racks

এপিআই 21+ এবং এপিআই = = 20 এর জন্য আমাকে কি কাস্টম রিসোর্স ফাইল তৈরি করতে হবে? অথবা এই বৈশিষ্ট্যগুলি কেবল এপি <= 20 এ উপেক্ষা করা হচ্ছে?
85

1
@ শ্রীদত্তকোটারি কীভাবে এটি সর্বোত্তম হতে পারে? ... এটি 21+ থেকে
ব্যবহারকারী 25

2
অ্যান্ড্রয়েড হিসাবে সেরা উত্তর সর্বনিম্ন 4.x থেকে সরে গেছে
টম

228

আমার অনির্দিষ্ট প্রগতিবারের (স্পিনার) জন্য আমি কেবল অঙ্কনযোগ্যগুলিতে একটি রঙ ফিল্টার সেট করেছি। দুর্দান্ত এবং কেবল একটি লাইন কাজ করে।

লাল যেখানে রঙ সেট করার উদাহরণ:

ProgressBar spinner = new android.widget.ProgressBar(
                context,
                null,
                android.R.attr.progressBarStyle);

spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, android.graphics.PorterDuff.Mode.MULTIPLY);

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


16
আপনার উত্তরটি আমার সবচেয়ে ভাল লেগেছে। আমার কাজ করার জন্য যদিও আমাকে এই কাজটি করতে হয়েছিল: myProgressBarSpinner.getIndeterminateDrawable ()। SetColorFilter (নতুন লাইটিং কালারফিল্টার (0xFF000000, ফোরগ্রাউন্ড কালার ডিজায়ার));
আর্ট জিগেল

4
আরও মনে রাখবেন যে এটি করার ফলে আপনার অ্যাপ্লিকেশনটিতে সমস্ত অগ্রগতি বারের অঙ্কনীয় পরিবর্তন হবে। কেবলমাত্র একটি নির্দিষ্ট ক্ষেত্রে এটি করতে, অঙ্কনযোগ্যকে মুউটেট () কল করুন, তারপরে রঙিন ফিল্টার সেট করুন এবং তারপরে আপনার অগ্রগতি বারে সেটইন্টারটেইনারমিট ড্রয়েবলকে কল করুন।
ডিমসুজ

3
এনবি: যাঁরা এটি ব্যবহার করেন এবং ভাবছেন কেন তাদের রঙটি হেক্স স্ট্রিংয়ের মতো লাগায় না কেন, এটিতে একাধিক রঙিন ফিল্টার রয়েছে। পরিবর্তন android.graphics.PorterDuff.Mode.MULTIPLYকরুন PorterDuff.Mode.SRC_INএবং আপনি সঠিক হেক্স রঙ পাবেন।
micnguyen

আমি মনে করি তার কেবল এই উত্তরটি দরকার ..... অ্যান্ড্রয়েড: অনির্দিষ্ট টিনিট = "@ অ্যান্ড্রয়েড: রঙ / কালো"
মুহাম্মদ আদিল

4
আমি এই হিসাবে ব্যবহার করেছি: প্রগতিবার = (প্রগতিবার) FindViewById (R.id.progressBar); প্রগ্রেসবার.জেটইন্ডেটারমিট্রেট ড্রয়েবল ()। সেট কালারফিল্টার (কনটেক্সটকম্প্যাট.জেট কালার (এটি, অ্যান্ড্রয়েড.আর.কমার.ওয়াইট), অ্যান্ড্রয়েড.গ্রাফিকস.পোর্টারডাফ.মোড.মুলটিপ্লি);
ashishdhiman2007

188

এটি একটি পুরানো প্রশ্ন, তবে থিম ব্যবহারের বিষয়টি এখানে উল্লেখ করা হয়নি। যদি আপনার ডিফল্ট থিমটি ব্যবহার করে থাকে তবে AppCompatআপনার ProgressBarরঙটি colorAccentআপনি সংজ্ঞায়িত করেছেন।

পরিবর্তন করা হচ্ছে colorAccentআপনার পরিবর্তন করতে হবে ProgressBar'র রঙ, কিন্তু পরিবর্তন এছাড়াও একাধিক স্থানে প্রতিফলিত করে। সুতরাং, আপনি যদি কেবল একটি নির্দিষ্ট রঙের জন্য আলাদা রঙ চান তবে আপনি PregressBarথিম প্রয়োগ করে এটি করতে পারেন ProgressBar:

  • আপনার ডিফল্ট থিমটি প্রসারিত করুন এবং ওভাররাইড করুন colorAccent

    <style name="AppTheme.WhiteAccent">
        <item name="colorAccent">@color/white</item> <!-- Whatever color you want-->
    </style>
  • এবং বৈশিষ্ট্য ProgressBarযুক্ত করুন android:theme:

    android:theme="@style/AppTheme.WhiteAccent"

সুতরাং এটি কিছু দেখতে হবে:

<ProgressBar
        android:id="@+id/loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:padding="10dp"
        android:theme="@style/AppTheme.WhiteAccent" />

সুতরাং আপনি কেবল colorAccentআপনার বিশেষের জন্য একটি পরিবর্তন করছেন ProgressBar

দ্রষ্টব্য : ব্যবহার করা কার্যকর styleহবে না। আপনি android:themeশুধুমাত্র ব্যবহার করা প্রয়োজন । আপনি এখানে থিমের আরও ব্যবহার খুঁজে পেতে পারেন: https://plus.google.com/u/0/+AndroidDevelopers/posts/JXHKyhsWHAH


18
পরিশেষে! ধন্যবাদ, দেখে মনে হচ্ছে অনেকগুলি বিকাশকারীরা অ্যাপকম্প্যাট ব্যবহার করে না, অনেক ব্যবহারকারী কেবল এপিআই 21+ এর সমাধান সহ ভোট-আপগুলি উত্তর দেয়, মোটেও ভাল নয়, তাদের আরও বেশি ডিভাইস / ওএস সমর্থন করা উচিত
ব্যবহারকারী 25

1
অসাধারণ! আমার জন্য পরিশ্রমী, তবে আমাকে নিশ্চিত করতে হয়েছিল যে প্যারেন্ট = "@ স্টাইল / থিম। অ্যাপকম্প্যাট" কোথাও শৈলীর শ্রেণিবদ্ধত্বে আমার অন্য পিতা বা মাতা ছিলেন এবং এটি প্রথমে কার্যকর হয়নি।
নুব্লুডলভোপার

@ নুব্লুডোলেফার হ্যাঁ আমি উল্লেখ করেছি যে প্রথম লাইনে আপনি যদি খেয়াল করেন।
কীর্তন 403

1
@ কীর্তন 403 আহা, হ্যাঁ, আমি এটি পেয়েছি এখন আপনি এটি উল্লেখ করেছেন, কিন্তু আমি প্রথম যখন এটি পড়েছিলাম তখন আমি সেভাবে বুঝতে পারি নি। আমি এটি খুব দ্রুত পড়েছি এবং আমি কোড সন্ধান করছি। যাইহোক ধন্যবাদ, আপনার উত্তরটি আমার পক্ষে সেরা!
নুব্লুডলভোপার

আপনার সমাধানটিকে +1 পছন্দ করেছে। তবে জাভাতে থিমের রঙ কীভাবে সেট করবেন ??? উদাহরণস্বরূপ যদি আমি এটি লাল হতে চাই <color color = "red"> # ff5900 </color>
ম্যাসেদ

54

সমস্ত এপিআই

যদি সমস্ত এপিআই ব্যবহার করে তবে থিমটি কেবল স্টাইলে তৈরি করুন

style.xml

<resources>

    //...

    <style name="progressBarBlue" parent="@style/Theme.AppCompat">
        <item name="colorAccent">@color/blue</item>
    </style>

</resources>

এবং ব্যবহার চলছে

<ProgressBar
    ...
    android:theme="@style/progressBarBlue" />

এপিআই স্তর 21 এবং উচ্চতর

যদি 21 স্তরের উচ্চতর এপিআই ব্যবহার করা হয় তবে এই কোডটি ব্যবহার করুন:

<ProgressBar
   //...
   android:indeterminate="true"
   android:indeterminateTintMode="src_atop"
   android:indeterminateTint="@color/secondary"/>

1
সুন্দর, আমার মনে হয় স্টাইল। এক্সএমএল পদ্ধতিটি সবচেয়ে ভাল ((20 এপিআই-র উপরে কোনও প্রয়োজন নেই)
কেডব্লিউ

1
সমস্ত API এর জন্য একটি সমাধান চাইলে সেরা সমাধান ধন্যবাদ :)
নবীন

34

কিছু পরামর্শ অনুসারে, আপনি কোনও রঙের সাথে একটি আকার এবং ক্লিপড্রেইবল নির্দিষ্ট করতে পারেন, তারপরে সেট করুন। আমার এই কাজটি প্রোগ্রামক্রমে আছে। এইভাবে আমি এটা ..

প্রথমে নিশ্চিত করুন যে আপনি অঙ্কনযোগ্য গ্রন্থাগারটি আমদানি করেছেন ..

import android.graphics.drawable.*;

তারপরে নীচের মত কোড ব্যবহার করুন;

ProgressBar pg = (ProgressBar)row.findViewById(R.id.progress);
final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null,null));
String MyColor = "#FF00FF";
pgDrawable.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
pg.setProgressDrawable(progress);   
pg.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
pg.setProgress(45);

1
আমি উপরের কোডটি চেষ্টা করেছিলাম, দুর্ভাগ্যক্রমে এটি "খালি" অগ্রগতি বারের ফলস্বরূপ। আমি কিছু অনুপস্থিত করছি?
ওশান ব্লু

আপনাকে ক্লিপড্র্যাবেলে সেটলভেল কল করতে হবে। এটি 0 থেকে 10000 পর্যন্ত একটি মান নেয় So
হ্যাপিইঞ্জাইনার

1
আমি উত্তরে একটি সম্পাদনা জমা দিয়েছি যা একটি "খালি" অগ্রগতি বারের একটি কারণ এবং এটি ঠিক করার 2 টি উপায় ব্যাখ্যা করে (হ্যাপিইঞ্জিনারের সংস্থান সহ)
রিচার্ড লে

@ রিচার্ডলিমেসুরিয়ার আপনি মন্তব্য বিভাগে 2 + উপায় ব্যাখ্যা পোস্ট করতে পারেন? progress.setLevel(2500)আমার পক্ষে কাজ করে না এবং সম্ভবত আপনার সম্পাদনাটি কোনও কারণে গৃহীত হয়নি। ধন্যবাদ। +1 টি।
ateiob


32

এটি আমার পক্ষে কাজ করেছে:

<ProgressBar
 android:indeterminateTint="#d60909"
 ... />

12
কেবলমাত্র 21 এবং উচ্চতর এপিআই স্তরে ব্যবহৃত হয়
নুমাইর

28

নির্ধারণ যদি:

((ProgressBar)findViewById(R.id.progressBar))
    .getIndeterminateDrawable()
    .setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);

আমি এটি ব্যবহার করেছি, তবে এটি অ্যানিমেটেড হয় না, কেবল রঙ প্রয়োগ করা হয়েছে ... আমি বিজ্ঞপ্তি প্রগতিবারটি ব্যবহার করছি
মানিকানন্দন

24

এটি আমার পক্ষে কাজ করে। এটি নিম্ন সংস্করণেও কাজ করে। আপনার syles.xML এ এটি যুক্ত করুন

<style name="ProgressBarTheme" parent="ThemeOverlay.AppCompat.Light">
<item name="colorAccent">@color/colorPrimary</item>
</style>

এবং এটি এক্সএমএলে এটি ব্যবহার করুন

<ProgressBar
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:theme="@style/ProgressBarTheme"
   />

আমি এটি ক্রিপ্টোউইটস নমুনা অ্যাপটিতে প্রয়োগ করেছি । আমি খুঁজে পেয়েছি যে এই সমাধানটি প্রত্যাশার মতো কাজ করার জন্য প্যারেন্ট থিমের প্রয়োজন নেই। parent="ThemeOverlay.AppCompat.Light"
অ্যাডাম হুরউইজ

23

আজকাল ২০১ 2016 সালে আমি দেখেছি যে কিছু প্রাক-ললিপপ ডিভাইসগুলি colorAccentসেটিংটিকে সম্মান করে না , সুতরাং সমস্ত API এর জন্য আমার চূড়ান্ত সমাধানটি এখন নিম্নলিখিত:

// fixes pre-Lollipop progressBar indeterminateDrawable tinting
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

    Drawable wrapDrawable = DrawableCompat.wrap(mProgressBar.getIndeterminateDrawable());
    DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
    mProgressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
} else {
    mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), android.R.color.holo_green_light), PorterDuff.Mode.SRC_IN);
}

বোনাস পয়েন্টগুলির জন্য, এটি কোনও অবচয় কোড ব্যবহার করে না। চেষ্টা করে দেখুন!


ভুলবেন না ডাকতে wrapDrawable.mutate()সঙ্গেDrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
Tarsem সিং

অ্যান্ড্রয়েড কিটক্যাট 4.4.2 এ কাজ করছে না working
প্রদীপ টিলা

একটি নতুন নতুন ৪.৪.২ এমুলেটরটিতে কেবল এটি (আবার) চেষ্টা করে দেখুন এটি কোনও সমস্যা ছাড়াই কাজ করে, আপনার .xmlসেটিংস পরীক্ষা করে দেখুন এবং অন্য কোনও ProgressBarরঙ রঙকে ছাড়িয়ে দিচ্ছে কিনা ।
হেনরিক ডি সুসা

20

এই আমি কি করেছি। কাজ করছে.

ProgressBar:

<ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            android:indeterminateDrawable="@drawable/progressdrawable"
           />

অগ্রগতিযোগ্য.এক্সএমএল:
আপনার পছন্দ মতো রঙ পরিবর্তন করতে এখানে গ্রেডিয়েন্ট ব্যবহার করুন। এবং অ্যান্ড্রয়েড: টুডগ্রিজ = "এক্স" এক্স এর মান বৃদ্ধি করে এবং প্রগতিবারটি দ্রুত ঘোরান। হ্রাস করুন এবং এটি আস্তে আবর্তিত হয় your আপনার প্রয়োজন অনুসারে অনুকূলিত করুন।

<?xml version="1.0" encoding="utf-8"?>
     <rotate xmlns:android="http://schemas.android.com/apk/res/android"
            android:duration="4000"
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="360" >

            <shape
                android:innerRadius="20dp"
                android:shape="ring"
                android:thickness="4dp"
                android:useLevel="false" >
                <size
                    android:height="48dp"
                    android:width="48dp" />

                <gradient
                    android:centerColor="#80ec7e2a"
                    android:centerY="0.5"
                    android:endColor="#ffec7e2a"
                    android:startColor="#00ec7e2a"
                    android:type="sweep"
                    android:useLevel="false" />
            </shape>

        </rotate>

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


এটি ডিফল্টর চেয়ে সম্পূর্ণ আলাদা (খারাপ দেখা) অ্যানিমেশন দেখায়।
আইএক্সএক্স

18

ডিফল্ট অগ্রগতি বারের চেহারা / অনুভূতি পরিবর্তন করার সময় একই সমস্যাটি হিট করুন। এখানে আরও কিছু তথ্য যা আশাবাদী মানুষকে সাহায্য করবে :)

  • এক্সএমএল ফাইলের নামটিতে কেবল অক্ষর থাকতে হবে: a-z0-9_.(অর্থাত্ কোনও মূলধন নয়!)
  • আপনার "অঙ্কনযোগ্য" উল্লেখ করার জন্য এটি it R.drawable.filename
  • ডিফল্ট চেহারাটিকে ওভাররাইড করতে আপনি ব্যবহার করেন myProgressBar.setProgressDrawable(...)তবে আপনার প্রয়োজন অনুসারে কেবল আপনার কাস্টম বিন্যাসটি উল্লেখ করতে পারে না R.drawable.filename, আপনাকে এটি হিসাবে এটি পুনরুদ্ধার করতে হবে Drawable:
    Resources res = getResources();
    myProgressBar.setProgressDrawable(res.getDrawable(R.drawable.filename);
  • অগ্রগতি / গৌণ অগ্রগতি / সর্বোচ্চ সেট করার আগে আপনাকে স্টাইল সেট করতে হবে (এটি পরে সেট করার ফলে আমার জন্য একটি 'খালি' অগ্রগতি বার তৈরি হয়েছিল)

15

এই উত্তরে সম্ভবত একটি জিনিস উল্লেখ করা হয়নি:

যদি আপনার থিমটি উত্তরাধিকার সূত্রে প্রাপ্ত হয় Theme.AppCompat, তবে আপনার থিমের ProgressBarমতো আপনি সংজ্ঞায়িত রঙটি ধরে নেবেন "colorAccent"

সুতরাং, ব্যবহার করে ..

<item name="colorAccent">@color/custom_color</item>

..আগে স্বয়ংক্রিয়ভাবে প্রগতিবারের রঙটি রঙ করুন @color/custom_color


1
আমার <আইটেমের নাম = "অ্যান্ড্রয়েড: colorAccent"> @ রঙ / হাইলাইট </item>
টোনিসিভগুলি


15

আপনি আপনার স্টাইলস, থিমগুলি বা অ্যান্ড্রয়েড ব্যবহার করে পরিবর্তন করতে চেষ্টা করতে পারেন: অনির্দিষ্ট টিনিট = "@ রঙ / আপনার রঙ" আপনি যে কোনও জায়গায় চাইলে, তবে কেবল একটি উপায় আছে যা কোনও অ্যান্ড্রয়েড এসকেডি সংস্করণে কাজ করবে:

আপনি অগ্রগতি বার যদি নির্ধারিত না হয় তবে দয়া করে ব্যবহার করুন:

progressBar.getProgressDrawable().setColorFilter(ContextCompat.getColor(context, R.color.yourColor), PorterDuff.Mode.SRC_IN );

যদি আপনি অগ্রগতি বারটি নির্ধারিত হয় তবে দয়া করে ব্যবহার করুন:

progressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), R.color.yourColor), PorterDuff.Mode.SRC_IN );

দুঃখের বিষয় যে অ্যান্ড্রয়েড এমন গোলযোগ!


ধন্যবাদ! এটি অনির্দিষ্টকালের জন্য কাজ করে ProgressBarতবে এটি নির্ধারণের জন্য রঙটি পুরো স্কেল এঁকে দেয়।
কুলমাইন্ড

14

আমি অনুভূমিক অগ্রগতি বারে এটি কীভাবে করেছি:

    LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable();
    Drawable progressDrawable = layerDrawable.findDrawableByLayerId(android.R.id.progress);
    progressDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);

2
আমি একই জিনিসটি করেছি, সাথে সাথে ব্যাকগ্রাউন্ডের রঙ পরিবর্তন করেছি: স্তরড্রাবএবল.ফাইন্ডড্রেবলযোগ্য বায়ালায়ারআইডি (android.R.id.backগ্রাউন্ড)। সেটর কালারফিল্টার (ট্র্যাকরালার, পোর্টারডাফ.মোড.এসআরসি);
কামেন ডবরেভ

1
@ কামেনডোব্রেভের মন্তব্য সহ এই উত্তরটি কেবলমাত্র আমি যা চেয়েছিলাম তা করেছে did আমি যখন কেবলমাত্র অগ্রগতিতে একটি রঙিন ফিল্টার সেট করি তখন পটভূমির রঙও বদলে যায়।
মি_কাতিসফারাকিস

13

সিম্পল সলিউশন যদি আপনি লেআউট এক্সএমএল ফাইলের রঙ পরিবর্তন করতে চান তবে নীচের কোডটি ব্যবহার করুন এবং আপনার পছন্দসই রঙের জন্য অনির্দিষ্টকেন্দ্রিক চিহ্ন ব্যবহার করুন।

    <ProgressBar
      android:id="@+id/progressBar"
      style="?android:attr/progressBarStyle"
      android:layout_width="wrap_content"
      android:indeterminate="true"
      android:indeterminateTintMode="src_atop"
      android:indeterminateTint="#ddbd4e"
      android:layout_height="wrap_content"
      android:layout_marginBottom="20dp"
      android:layout_alignParentBottom="true"
      android:layout_centerHorizontal="true" />

12

এই সমাধানটি আমার পক্ষে কাজ করেছে:

<style name="Progressbar.White" parent="AppTheme">
    <item name="colorControlActivated">@color/white</item>
</style>

<ProgressBar
    android:layout_width="@dimen/d_40"
    android:layout_height="@dimen/d_40"
    android:indeterminate="true"
    android:theme="@style/Progressbar.White"/>

8

আরও একটি ছোট বিষয়, আপনি যদি কোনও বেস থিম উত্তরাধিকার সূত্রে পান তবে থিম সমাধানটি কাজ করে, সুতরাং অ্যাপ কমপ্যাক্টের জন্য আপনার থিমটি হওয়া উচিত:

<style name="AppTheme.Custom" parent="@style/Theme.AppCompat">
    <item name="colorAccent">@color/custom</item>
</style>

এবং তারপরে এটি অগ্রগতি বার থিমে সেট করুন

<ProgressBar
    android:id="@+id/progressCircle_progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:theme="@style/AppTheme.Custom"
    android:indeterminate="true"/>

7

অনুভূমিক প্রগতিবার রঙ পরিবর্তন করতে (কোটলিনে):

fun tintHorizontalProgress(progress: ProgressBar, @ColorInt color: Int = ContextCompat.getColor(progress.context, R.color.colorPrimary)){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        progress.progressTintList = ColorStateList.valueOf(color)
    } else{
        val layerDrawable = progress.progressDrawable as? LayerDrawable
        val progressDrawable = layerDrawable?.findDrawableByLayerId(android.R.id.progress)
        progressDrawable?.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
    }
}

অনির্দিষ্ট অগ্রগতি বারের রঙ পরিবর্তন করতে:

fun tintIndeterminateProgress(progress: ProgressBar, @ColorInt color: Int = ContextCompat.getColor(progress.context, R.color.colorPrimary)){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        progress.indeterminateTintList = ColorStateList.valueOf(color)
    } else {
        (progress.indeterminateDrawable as? LayerDrawable)?.apply {
            if (numberOfLayers >= 2) {
                setId(0, android.R.id.progress)
                setId(1, android.R.id.secondaryProgress)
                val progressDrawable = findDrawableByLayerId(android.R.id.progress).mutate()
                progressDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
            }
        }
    }
}

এবং অবশেষে এটি প্রাক-ললিপপ অগ্রগতি বারগুলিতে রঙিত হয়

এপিআই 19 এ টিন্টেড অগ্রগতি


6

অনুভূমিক অগ্রগতি বার কাস্টম উপাদান শৈলী:

ব্যাকগ্রাউন্ডের রঙ এবং অনুভূমিক অগ্রগতি বারের অগ্রগতি পরিবর্তন করতে।

<style name="MyProgressBar" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
    <item name="android:progressBackgroundTint">#69f0ae</item>
    <item name="android:progressTint">#b71c1c</item>
    <item name="android:minWidth">200dp</item>
</style>

কাস্টম উপাদান স্টাইল এবং কাস্টম অগ্রগতি বার চেক জন্য শৈলী বৈশিষ্ট্য সেট করে এটি অগ্রগতি বারে প্রয়োগ করুন http://www.zoftino.com/android-progressbar-and-custom-progressbar- উদাহরণ


3
এটির জন্য ন্যূনতম এপিআই স্তর 21
শিহাব উদ্দিন

6

পলিজির উত্তর সম্পর্কে তথ্য যুক্ত করতে পোস্ট করা হয়েছে , যেহেতু আতিয়েব আমাকে কিছু ব্যাখ্যা করতে বলেছেন ...


আমি বলতে পারি যে লেখার সময় যখন আমি অ্যান্ড্রয়েড উত্স কোডের বর্তমান সংস্করণটি দেখছিলাম তখন সেখানে একটি বাগ / ইস্যু / অপটিমাইজেশন রয়েছে ProgressBarযা অগ্রগতিটিকে একটি মানকে সেট করার চেষ্টাকে উপেক্ষা করে ইতিমধ্যে আছে

  • উদাহরণস্বরূপ, যদি অগ্রগতি = 45, এবং আপনি এটিকে 45 এ সেট করার চেষ্টা করেন, কোডটি কিছুই করবে না এবং অগ্রগতি পুনরায় আঁকবে না

কল করার পরে ProgressBar.setProgressDrawable(), আপনার অগ্রগতি বারটি ফাঁকা থাকবে (কারণ আপনি আঁকার অংশটি পরিবর্তন করেছেন)।

এর অর্থ আপনার অগ্রগতি সেট করা এবং এটি পুনরায় চিত্রিত করা দরকার। তবে আপনি যদি কেবল অগ্রগতিটিকে একটি সংরক্ষিত মান হিসাবে সেট করেন তবে এটি কিছুই করবে না।

আপনাকে অবশ্যই এটি প্রথমে 0 এ সেট করতে হবে, তারপরে আবার "পুরাতন" মানটিতে সেট করুন এবং বারটি পুনরায় চিত্রিত হবে।


সুতরাং সংক্ষেপে:

  • "পুরানো" অগ্রগতির মান সংরক্ষণ করুন
  • অঙ্কনযোগ্য / রঙ আপডেট করুন (বারটি ফাঁকা করে তোলে)
  • অগ্রগতি 0 এ পুনরায় সেট করুন (অন্যথায় পরের লাইন কিছুই করে না)
  • অগ্রগতিটিকে "পুরানো" মান (ফিক্স বার) এ পুনরায় সেট করুন
  • বাতিল করা

নীচে আমার কাছে একটি পদ্ধতি রয়েছে যা এটি করে:

protected void onResume()
{
    super.onResume();
    progBar = (ProgressBar) findViewById(R.id.progress_base);

    int oldProgress = progBar.getProgress();

    // define new drawable/colour
    final float[] roundedCorners = new float[]
        { 5, 5, 5, 5, 5, 5, 5, 5 };
    ShapeDrawable shape = new ShapeDrawable(new RoundRectShape(
        roundedCorners, null, null));
    String MyColor = "#FF00FF";
    shape.getPaint().setColor(Color.parseColor(MyColor));
    ClipDrawable clip = new ClipDrawable(shape, Gravity.LEFT,
        ClipDrawable.HORIZONTAL);
    progBar.setProgressDrawable(clip);

    progBar.setBackgroundDrawable(getResources().getDrawable(
        android.R.drawable.progress_horizontal));

    // work around: setProgress() ignores a change to the same value
    progBar.setProgress(0);
    progBar.setProgress(oldProgress);

    progBar.invalidate();
}

হ্যাপিইঞ্জাইনারের সমাধান হিসাবে, আমি ম্যানুয়ালি "অগ্রগতি" অফসেট সেট করার জন্য এটি একটি অনুরূপ কাজ হিসাবে মনে করি। উভয় ক্ষেত্রেই উপরের কোডটি আপনার পক্ষে কাজ করা উচিত।


ধন্যবাদ..এটি সত্যই কাজ করে..কিন্তু আমার আঁকার স্থির ছিল (উত্স থেকে) .. এটি কার্যকর হয়নি। আমি কেবলমাত্র "অঙ্কনযোগ্য ইংলিটিয়েটসেলফ ()" যুক্ত করার পরে এটি কাজ করেছিল; 'সেটপ্রোগ্রেস (0)' এর আগে এবং 'সেটপ্রোগ্রেসড্রেইবল (অঙ্কনযোগ্য)'
আলাসিও কারভালহো


5

সহজভাবে ব্যবহার করুন:

PorterDuff.Mode mode = PorterDuff.Mode.SRC_IN;
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
    mode = PorterDuff.Mode.MULTIPLY;
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
    progressBar.setProgressBackgroundTintList(ColorStateList.valueOf(Color.RED));
} else {
    Drawable progressDrawable;
    progressDrawable = (progressBar.isIndeterminate() ? progressBar.getIndeterminateDrawable() : progressBar.getProgressDrawable()).mutate();
    progressDrawable.setColorFilter(context.getResources().getColor(Color.RED), mode);
    progressBar.setProgressDrawable(progressDrawable);
}

4

অনুভূমিক শৈলীর প্রগতিবারের জন্য আমি ব্যবহার করি:

import android.widget.ProgressBar;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.ClipDrawable;
import android.view.Gravity;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;

public void setColours(ProgressBar progressBar,
                        int bgCol1, int bgCol2, 
                        int fg1Col1, int fg1Col2, int value1,
                        int fg2Col1, int fg2Col2, int value2)
  {
    //If solid colours are required for an element, then set
    //that elements Col1 param s the same as its Col2 param
    //(eg fg1Col1 == fg1Col2).

    //fgGradDirection and/or bgGradDirection could be parameters
    //if you require other gradient directions eg LEFT_RIGHT.

    GradientDrawable.Orientation fgGradDirection
        = GradientDrawable.Orientation.TOP_BOTTOM;
    GradientDrawable.Orientation bgGradDirection
        = GradientDrawable.Orientation.TOP_BOTTOM;

    //Background
    GradientDrawable bgGradDrawable = new GradientDrawable(
            bgGradDirection, new int[]{bgCol1, bgCol2});
    bgGradDrawable.setShape(GradientDrawable.RECTANGLE);
    bgGradDrawable.setCornerRadius(5);
    ClipDrawable bgclip = new ClipDrawable(
            bgGradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);     
    bgclip.setLevel(10000);

    //SecondaryProgress
    GradientDrawable fg2GradDrawable = new GradientDrawable(
            fgGradDirection, new int[]{fg2Col1, fg2Col2});
    fg2GradDrawable.setShape(GradientDrawable.RECTANGLE);
    fg2GradDrawable.setCornerRadius(5);
    ClipDrawable fg2clip = new ClipDrawable(
            fg2GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);        

    //Progress
    GradientDrawable fg1GradDrawable = new GradientDrawable(
            fgGradDirection, new int[]{fg1Col1, fg1Col2});
    fg1GradDrawable.setShape(GradientDrawable.RECTANGLE);
    fg1GradDrawable.setCornerRadius(5);
    ClipDrawable fg1clip = new ClipDrawable(
            fg1GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);        

    //Setup LayerDrawable and assign to progressBar
    Drawable[] progressDrawables = {bgclip, fg2clip, fg1clip};
    LayerDrawable progressLayerDrawable = new LayerDrawable(progressDrawables);     
    progressLayerDrawable.setId(0, android.R.id.background);
    progressLayerDrawable.setId(1, android.R.id.secondaryProgress);
    progressLayerDrawable.setId(2, android.R.id.progress);

    //Copy the existing ProgressDrawable bounds to the new one.
    Rect bounds = progressBar.getProgressDrawable().getBounds();
    progressBar.setProgressDrawable(progressLayerDrawable);     
    progressBar.getProgressDrawable().setBounds(bounds);

    // setProgress() ignores a change to the same value, so:
    if (value1 == 0)
        progressBar.setProgress(1);
    else
        progressBar.setProgress(0);
    progressBar.setProgress(value1);

    // setSecondaryProgress() ignores a change to the same value, so:
    if (value2 == 0)
        progressBar.setSecondaryProgress(1);
    else
        progressBar.setSecondaryProgress(0);
    progressBar.setSecondaryProgress(value2);

    //now force a redraw
    progressBar.invalidate();
  }

একটি উদাহরণ কল হবে:

  setColours(myProgressBar, 
          0xff303030,   //bgCol1  grey 
          0xff909090,   //bgCol2  lighter grey 
          0xff0000FF,   //fg1Col1 blue 
          0xffFFFFFF,   //fg1Col2 white
          50,           //value1
          0xffFF0000,   //fg2Col1 red 
          0xffFFFFFF,   //fg2Col2 white
          75);          //value2

আপনার যদি 'গৌণ অগ্রগতি' প্রয়োজন না হয় তবে কেবল মান 2 এ মান 2 সেট করুন।


4

এই কাস্টম শৈলীটি অগ্রগতি বারে প্রয়োগ করুন।

<style name="customProgress" parent="@android:style/Widget.ProgressBar.Small">
        <item name="android:indeterminateDrawable">@drawable/progress</item>
        <item name="android:duration">40</item>
        <item name="android:animationCache">true</item>
        <item name="android:drawingCacheQuality">low</item>
        <item name="android:persistentDrawingCache">animation</item>
    </style>

@ অঙ্কনযোগ্য / অগ্রগতি.এক্সএমএল -

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/spinner_white"
    android:pivotX="50%"
    android:pivotY="50%" />

অগ্রগতি বারের জন্য এই ধরণের চিত্র ব্যবহার করুন। এখানে চিত্র বর্ণনা লিখুন

আরও ভাল ফলাফলের জন্য আপনি একাধিক অগ্রগতি চিত্র ব্যবহার করতে পারেন। এবং দয়া করে চিত্রগুলি ব্যবহার করতে দ্বিধা করবেন না, কারণ অ্যান্ড্রয়েড প্ল্যাটফর্ম নিজেই প্রগতিবারের জন্য চিত্রগুলি ব্যবহার করে। কোডটি এসডিকে থেকে বের করা হয়েছে :)


4

মুহম্মদ-আদিল অনুসারে 21 ও তদূর্ধের এসডিকে জন্য পরামর্শ দেওয়া হয়েছে

android:indeterminateTint="@color/orange"

এক্সএমএল আমার পক্ষে কাজ করে, যথেষ্ট সহজ।


আপনি যদি পুরো অ্যাপের জন্য পরিবর্তন করতে চান তবে দয়া করে <রঙের নাম = "রেডএকসেন্ট"> # FE6C27 </color> এর মানটি পরিবর্তন করুন। আপনার মান / color.xML এ।
মাগিল

4

প্রোগ্রেম্যাটিকভাবে প্রগতিবারের রঙ পরিবর্তন করার কোড এখানে।

ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb_listProgressBar);
int colorCodeDark = Color.parseColor("#F44336");
progressBar.setIndeterminateTintList(ColorStateList.valueOf(colorCodeDark));

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