এই প্রশ্নটি সমাধানের জন্য 3 টি উপায় রয়েছে:
- প্রগতি বারটি বর্ণনামূলকভাবে কীভাবে সামঞ্জস্য করবেন
- প্রোগ্রামোগ্রাফিকভাবে কীভাবে প্রগতিবারের রঙটি সমন্বয় করা যায়, তবে সংকলন-কালার আগে ঘোষিত বিভিন্ন পূর্বনির্ধারিত রং থেকে রঙটি বেছে নিন
- প্রোগ্রামোগ্রাফিকভাবে প্রগতিবারের রঙটি কীভাবে সামঞ্জস্য করা যায় এবং প্রোগ্রামটিগতভাবে রঙও তৈরি করতে হয়।
বিশেষত # 2 এবং # 3 এর আশেপাশে প্রচুর বিভ্রান্তি রয়েছে, এমএফকোস্টার উত্তরের মন্তব্যে দেখা গেছে। এই উত্তরটি যে কোনও সময় আপনি প্রাথমিক রঙ ব্যতীত যে কোনও কিছুতে প্রগতি বারটি সেট করতে চাইলে অপ্রত্যাশিত রঙের ফল পাবেন, কারণ এটি কেবল ব্যাকগ্রাউন্ডের রঙকেই পরিবর্তন করে এবং প্রকৃত অগ্রগতি বার "ক্লিপ" অঞ্চলটি এখনও হ্রাস অস্বচ্ছতার সাথে একটি হলুদ রঙের ওভারলে হবে। উদাহরণস্বরূপ, গা method় বেগুনি রঙের ব্যাকগ্রাউন্ড সেট করতে সেই পদ্ধতিটি ব্যবহার করার ফলে কিছুটা ক্রেজি গোলাপী বর্ণের অগ্রগতি বার "ক্লিপ" রঙ আসবে যার ফলে গা dark় বেগুনি এবং হ্রাসিত আলফার মাধ্যমে হলুদ মিশ্রিত হবে।
যাইহোক, # 1 পুরোপুরি রায়ান দ্বারা উত্তর দিয়েছে এবং Šটার্কে উত্তর দেয় # 3 এর বেশিরভাগই, তবে যারা # 2 এবং # 3 এর সম্পূর্ণ সমাধান খুঁজছেন:
প্রোগ্রামোগ্রাফিকভাবে কীভাবে প্রগতি বারটি সমন্বয় করা যায়, তবে এক্সএমএলে ঘোষিত পূর্বনির্ধারিত রঙ থেকে রঙটি বেছে নিন choose
পুনরায় / অঙ্কনযোগ্য / my_progressbar.xML :
এই ফাইলটি তৈরি করুন তবে মাই_প্রোগ্রেস এবং মাই_সেকেন্ডপ্রোগ্রে রঙ পরিবর্তন করুন:
(দ্রষ্টব্য: এটি ডিফল্ট অ্যান্ড্রয়েড এসডিকে প্রগ্রেসবারকে সংজ্ঞায়িত করা আসল এক্সএমএল ফাইলের একটি অনুলিপি, তবে আমি আইডি এবং রঙগুলি পরিবর্তন করেছি original আসলটির নাম প্রগতি_হরিজন্টাল হয়েছে)
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/my_progress_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="@+id/my_secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#80ff171d"
android:centerColor="#80ff1315"
android:centerY="0.75"
android:endColor="#a0ff0208"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@+id/my_progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#7d2afdff"
android:centerColor="#ff2afdff"
android:centerY="0.75"
android:endColor="#ff22b9ba"
android:angle="270"
/>
</shape>
</clip>
</item>
আপনার জাভাতে :
final Drawable drawable;
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < 16) {
drawable = ctx.getResources().getDrawable(R.drawable.my_progressbar);
} else {
drawable = ContextCompat.getDrawable(ctx, R.drawable.my_progressbar);
}
progressBar.setProgressDrawable(drawable)
প্রোগ্রামিগ্রেমে প্রগতিবারের রঙটি কীভাবে সামঞ্জস্য করা যায়, এবং এছাড়াও প্রোগ্রামটিমেটিকভাবে রঙ তৈরি করা যায়
সম্পাদনা: আমি এটি সঠিকভাবে সমাধান করার জন্য সময় পেয়েছি। আমার প্রাক্তন উত্তর এটিকে কিছুটা দ্বিধাবিভক্ত রেখে গেছে।
একটি প্রগতিবার একটি লেয়ারড্র্যাবেলে 3 ড্রয়যোগ্য হিসাবে তৈরি হয়।
- স্তর 1 পটভূমি
- স্তর 2 হ'ল গৌণ অগ্রগতির রঙ
- স্তর 3 প্রধান অগ্রগতির বার রঙ
নীচের উদাহরণে আমি প্রধান অগ্রগতির বারটিকে সায়ানে পরিবর্তন করব।
//Create new ClipDrawable to replace the old one
float pxCornerRadius = viewUtils.convertDpToPixel(5);
final float[] roundedCorners = new float[] { pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius };
ShapeDrawable shpDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null, null));
shpDrawable.getPaint().setColor(Color.CYAN);
final ClipDrawable newProgressClip = new ClipDrawable(shpDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
//Replace the existing ClipDrawable with this new one
final LayerDrawable layers = (LayerDrawable) progressBar.getProgressDrawable();
layers.setDrawableByLayerId(R.id.my_progress, newProgressClip);
উদাহরণটি এটি একটি শক্ত রঙে সেট করে। আপনি এটি প্রতিস্থাপন করে গ্রেডিয়েন্ট রঙে সেট করতে পারেন
shpDrawable.getPaint().setColor(Color.CYAN);
সঙ্গে
Shader shader = new LinearGradient(0, 0, 0, progressBar.getHeight(), Color.WHITE, Color.BLACK, Shader.TileMode.CLAMP);
shpDrawable.getPaint().setShader(shader);
চিয়ার্স।
-Lance