প্রগতিবার / অগ্রগতি ডায়ালগের জন্য কাস্টম অঙ্কনযোগ্য


128

গুগল সরবরাহ করেছে এমন সীমিত ডকুমেন্টেশন পড়ে, আমি অনুভূতি পেয়েছি যে প্রগ্রেসবার / প্রগ্রেসডায়ালগের চেহারা (অঙ্কনযোগ্য) প্রগ্রেসবারের শৈলীর বৈশিষ্ট্যে কেবল একটি নতুন শৈলী তৈরি করে এটি পরিবর্তন করা সম্ভব। তবে আমি এটি সঠিকভাবে কাজ করতে পারি না। আমি এখন পর্যন্ত যা করেছি তা এখানে:

আমি এর মতো একটি আকার তৈরি করেছি (mp2.xML)

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="ring"
  android:innerRadiusRatio="4"
  android:thicknessRatio="4"
  android:useLevel="false">
 <size android:width="50dip" android:height="50dip" />
 <gradient android:type="sweep" android:useLevel="false" android:startColor="#300000ff" android:centerColor="#500000ff" android:endColor="#ff0000ff" />
</shape>

তারপরে এটির মতো একটি অ্যানিমেশন (mp3.xML) তৈরি করুন:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="30" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="30" android:toDegrees="60" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="60" android:toDegrees="90" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="90" android:toDegrees="120" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="120" android:toDegrees="150" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="150" android:toDegrees="180" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="180" android:toDegrees="210" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="210" android:toDegrees="240" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="240" android:toDegrees="270" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="270" android:toDegrees="300" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="300" android:toDegrees="330" android:repeatCount="1" />
 </item>
 <item android:duration="70">
  <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="330" android:toDegrees="360" android:repeatCount="1" />
 </item>
</animation-list>

তারপরে এটির মতো একটি শৈলী (attrs.xML) তৈরি করুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <style parent="@android:style/Widget.ProgressBar" name="customProgressBar">
  <item name="android:progressDrawable">@anim/mp3</item>
 </style>
</resources>

এবং আমার মেইন.এমএমএল এ আমি স্টাইলটি সেট করেছি:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" android:drawingCacheQuality="high">
 <ProgressBar android:id="@+id/ProgressBar01"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" style="@style/customProgressBar"/>
</LinearLayout>

তবে এটি এখনও আগের মতোই আকর্ষণীয় দেখায়। আমি কি ভুল করছি?


শুধু নমুনা ব্রাউজিং হতে ঘটেছে এবং পড়ার পর পুলিশের জুড়ে এসেছিল এই । আশা করি এটি আপনার সমস্যার সমাধান করে।
পুনরায় স্ক্রিন করুন

আমি জানতাম কীভাবে শেপ / গ্রেডিয়েন্ট / অ্যানিমেশন তৈরি করতে হয়। আমি উপরে যেটি তৈরি করেছি তার উপর ভিত্তি করে আপনি যে পোস্টটি উল্লেখ করছেন তার উপর ভিত্তি করে (আমি এটি কিছুটা চেঞ্জ করতে হয়েছিল কারণ এটি খুব চপ্পল এবং ধীর দেখায়)। আমি কেবল "স্টাইল" ব্যবহার করে এটি অর্জন করতে সক্ষম হবেন আশা করি। যাইহোক reponce জন্য ধন্যবাদ
স্যাম

আপনি যদি আপনার অগ্রগতি বারটি সম্পূর্ণরূপে কাস্টমাইজ করতে চান এবং সত্যিই অভিনব হয়ে উঠতে চান তবে এই ব্লগ পোস্টটি একবার দেখে নিন এটি আপনি যা চেয়েছিলেন তার চেয়ে সামান্য কিছু হতে পারে বা আপনার সন্ধানের চেয়ে কী হতে পারে। আশা করি এটা সাহায্য করবে!
জাগসৌন্ড

উত্তর:


142

আমি কাস্টম অগ্রগতি বার তৈরি করার জন্য নিম্নলিখিতটি ব্যবহার করেছি।

ফাইল res/drawable/progress_bar_states.xmlবিভিন্ন রাজ্যের রঙগুলি ঘোষণা করে:

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

    <item android:id="@android:id/background">
        <shape>
            <gradient
                    android:startColor="#000001"
                    android:centerColor="#0b131e"
                    android:centerY="0.75"
                    android:endColor="#0d1522"
                    android:angle="270"
            />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <gradient
                        android:startColor="#234"
                        android:centerColor="#234"
                        android:centerY="0.75"
                        android:endColor="#a24"
                        android:angle="270"
                />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <gradient
                    android:startColor="#144281"
                    android:centerColor="#0b1f3c"
                    android:centerY="0.75"
                    android:endColor="#06101d"
                    android:angle="270"
                />
            </shape>
        </clip>
    </item>

</layer-list>

এবং আপনার লেআউট xML এর মধ্যে কোড:

<ProgressBar android:id="@+id/progressBar"
    android:progressDrawable="@drawable/progress_bar_states"
    android:layout_width="fill_parent" android:layout_height="8dip" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:indeterminateOnly="false" 
    android:max="100">
</ProgressBar>

উপভোগ করুন!


@ ইউলিয়া রাগোভায়ার কারণ এটি কি কারণ আঁকাগুলি ক্লিপ উপাদানগুলিতে নেই? আমি এটি কাজ করতে পারে না; ক্লিপ এলিমেন্টটি কী বলে সন্দেহ করছেন।
অ্যান্ড্রু ওয়াইল্ড

2
এটি কিভাবে করবেন ProgressDialog?
নেজাম

@ নেজাম আমি আপনাকে সঠিক কোড বা নমুনা দিতে পারছি না তবে এটি আপনাকেই করতে হবে। অগ্রগতি ডায়ালগটিতে একটি কাস্টম থিম সরবরাহ করুন। কাস্টম থিমটি অগ্রগতি শৈলীর সংজ্ঞা দেয়।
জোনা

এই জিনিসটির স্ক্রিনশটটি কার্যকর অবস্থায় দেখলে ভালো লাগবে
কিউইডি

@ জোনা আমি জানি কিছুক্ষণ হয়ে গেছে, তবে কীভাবে আমি এই অঙ্কনটিকে উচ্চতায় আরও ছোট করে তুলতে পারি ??
লিওফোনটস

55

এখানে সমাধানের সাথে একটি নির্ধারিত অগ্রগতি ডায়ালগটি ব্যবহার করতে আমার কিছুটা সমস্যা হয়েছিল, কিছু কাজ এবং পরীক্ষার পরে এবং ত্রুটির পরে আমি এটি কাজে এসেছি।

প্রগতি ডায়ালগের জন্য প্রথমে আপনি যে অ্যানিমেশনটি ব্যবহার করতে চান তা তৈরি করুন। আমার ক্ষেত্রে আমি 5 টি চিত্র ব্যবহার করেছি।

../res/anim/progress_dialog_icon_drawable_animation.xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_progress_dialog_drawable_1" android:duration="150" />
    <item android:drawable="@drawable/icon_progress_dialog_drawable_2" android:duration="150" />
    <item android:drawable="@drawable/icon_progress_dialog_drawable_3" android:duration="150" />
    <item android:drawable="@drawable/icon_progress_dialog_drawable_4" android:duration="150" />
    <item android:drawable="@drawable/icon_progress_dialog_drawable_5" android:duration="150" />
</animation-list>

আপনি যেখানে একটি অগ্রগতি ডায়ালগ প্রদর্শন করতে চান:

dialog = new ProgressDialog(Context.this);
dialog.setIndeterminate(true);
dialog.setIndeterminateDrawable(getResources().getDrawable(R.anim.progress_dialog_icon_drawable_animation));
dialog.setMessage("Some Text");
dialog.show();

এই সমাধানটি সত্যই সহজ এবং আমার পক্ষে কাজ করেছে, আপনি প্রগ্রেডায়ালগটি প্রসারিত করতে পারেন এবং এটি অভ্যন্তরীণভাবে অঙ্কনযোগ্যকে ওভাররাইড করতে পারেন, তবে, আমার প্রয়োজনের জন্য এটি সত্যিই জটিল ছিল তাই আমি এটি করি নি।


1
"কথোপকথন.সেট ইন্ডেটারমিট্রেটড্রেইবল ()"
স্কটিয়াব

ডায়ালগটিতে কেবল একটি চিত্র থাকার কোনও উপায় আছে, তাই কোনও বার্তা নেই, তবে পুরো ডায়ালগটিতে একটি অঙ্কনযোগ্য?
ডিয়েগো

@ ডিগো আমি চেষ্টা করে দেখিনি, তবে কেন দেখছি না don't আপনি কি এমন একটি অঙ্কনযোগ্য ব্যবহারের চেষ্টা করেছেন যা আপনার পছন্দসই স্থানটি গ্রহণ করবে (যেমন একটি দীর্ঘ দিক অনুপাত ছিল) এবং ডায়ালগটিতে কোনও পাঠ্য সেট না করে?
ব্লাইন্ডস্টাফ

40

সেটিং চেষ্টা করুন:

android:indeterminateDrawable="@drawable/progress" 

এটা আমার জন্য কাজ করেছে। অগ্রগতির কোডও এখানে রয়েছে x xML:

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

    <shape android:shape="ring" android:innerRadiusRatio="3"
        android:thicknessRatio="8" android:useLevel="false">

        <size android:width="48dip" android:height="48dip" />

        <gradient android:type="sweep" android:useLevel="false"
            android:startColor="#4c737373" android:centerColor="#4c737373"
            android:centerY="0.50" android:endColor="#ffffd300" />

    </shape>

</rotate> 

3
আপনি যদি কোনও অঙ্কনযোগ্য ব্যবহার করতে চান তবে কেবল android:drawable=ঘোরান ট্যাগে এবং তারপরে আকারটি সরিয়ে ফেলুন। পরিশেষে কেউ স্পিনিং প্রগ্রেস বার প্রশ্নের উত্তর দেয়।
MinceMan

2
এটি রঙ নির্ধারণ করে তবে অগ্রগতি বারটি ঘুরছে না
ক্রলার ler

দ্রুত রোটেশন গতি সমন্বয় android:toDegreesকরতে উচ্চতর মান সেট করা যেতে পারে। এটি সেট করা android:toDegrees="1080"3 বারের আবর্তন বাড়িয়ে তুলবে।
লেভোর

10

আপনার স্টাইলটি দেখতে এমন হওয়া উচিত:

<style parent="@android:style/Widget.ProgressBar" name="customProgressBar">
    <item name="android:indeterminateDrawable">@anim/mp3</item>
</style>

6

স্কেল সহ কাস্টম অগ্রগতি!

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:duration="150">
        <scale
            android:drawable="@drawable/face_no_smile_eyes_off"
            android:scaleGravity="center" />
    </item>
    <item android:duration="150">
        <scale
            android:drawable="@drawable/face_no_smile_eyes_on"
            android:scaleGravity="center" />
    </item>
    <item android:duration="150">
        <scale
            android:drawable="@drawable/face_smile_eyes_off"
            android:scaleGravity="center" />
    </item>
    <item android:duration="150">
        <scale
            android:drawable="@drawable/face_smile_eyes_on"
            android:scaleGravity="center" />
    </item>

</animation-list>

5

আমি আপনার কোডটি করি i আমি চালাতে পারি তবে আমার দুটি জায়গা সংশোধন করতে হবে:

  1. name="android:indeterminateDrawable" পরিবর্তে android:progressDrawable

  2. নাম attrs.xML ---> শৈলী.এক্সএমএল পরিবর্তন করুন


আপনি আপনার অ্যান্ড্রয়েড পরিবর্তন করেছেন: শুরু রঙ = "# 300000ff" থেকে # FF00ff00, অন্য রঙ পরিবর্তন করুন
পেঙ্গওয়ং

0

আমি নিশ্চিত নই তবে এই ক্ষেত্রে আপনি সতর্কতা সংলাপে একটি পৃথক বিন্যাস ফাইল সেট করে একটি সম্পূর্ণ কাস্টমাইজড অ্যালার্টডায়ালগের সাথে যেতে পারেন এবং আপনার উপরের কোডের অংশটি ব্যবহার করে আপনার চিত্রদর্শনটির জন্য অ্যানিমেশন সেট করতে হবে যা এটি করা উচিত!


0
public class CustomProgressBar {
    private RelativeLayout rl;
    private ProgressBar mProgressBar;
    private Context mContext;
    private String color__ = "#FF4081";
    private ViewGroup layout;
    public CustomProgressBar (Context context, boolean isMiddle, ViewGroup layout) {
        initProgressBar(context, isMiddle, layout);
    }

    public CustomProgressBar (Context context, boolean isMiddle) {
        try {
            layout = (ViewGroup) ((Activity) context).findViewById(android.R.id.content).getRootView();
        } catch (Exception e) {
            e.printStackTrace();
        }
        initProgressBar(context, isMiddle, layout);
    }

    void initProgressBar(Context context, boolean isMiddle, ViewGroup layout) {
        mContext = context;
        if (layout != null) {
            int padding;
            if (isMiddle) {
                mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleSmall);
                // mProgressBar.setBackgroundResource(R.drawable.pb_custom_progress);//Color.parseColor("#55000000")
                padding = context.getResources().getDimensionPixelOffset(R.dimen.padding);
            } else {
                padding = context.getResources().getDimensionPixelOffset(R.dimen.padding);
                mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleSmall);
            }
            mProgressBar.setPadding(padding, padding, padding, padding);
            mProgressBar.setBackgroundResource(R.drawable.pg_back);
            mProgressBar.setIndeterminate(true);
                try {
                    color__ = AppData.getTopColor(context);//UservaluesModel.getAppSettings().getSelectedColor();
                } catch (Exception e) {
                    color__ = "#FF4081";
                }
                int color = Color.parseColor(color__);
//                color=getContrastColor(color);
//                color__ = color__.replaceAll("#", "");//R.color.colorAccent
                mProgressBar.getIndeterminateDrawable().setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_ATOP);
            } 
            }

            RelativeLayout.LayoutParams params = new
                    RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            rl = new RelativeLayout(context);
            if (!isMiddle) {
                int valueInPixels = (int) context.getResources().getDimension(R.dimen.padding);
                lp.setMargins(0, 0, 0, (int) (valueInPixels / 1.5));//(int) Utils.convertDpToPixel(valueInPixels, context));
                rl.setClickable(false);
                lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            } else {
                rl.setGravity(Gravity.CENTER);
                rl.setClickable(true);
            }
            lp.addRule(RelativeLayout.CENTER_IN_PARENT);
            mProgressBar.setScaleY(1.55f);
            mProgressBar.setScaleX(1.55f);
            mProgressBar.setLayoutParams(lp);

            rl.addView(mProgressBar);
            layout.addView(rl, params);
        }
    }

    public void show() {
        if (mProgressBar != null)
            mProgressBar.setVisibility(View.VISIBLE);
    }

    public void hide() {
        if (mProgressBar != null) {
            rl.setClickable(false);
            mProgressBar.setVisibility(View.INVISIBLE);
        }
    }
}

এবং তারপর কল

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