2011-01-03 9 views
6

मुझे यह पता लगाने के लिए एक सुराग मिला है। मेरी प्रगति पट्टी बादल का आकार होना चाहिए। क्या कोई मुझे किसी पुस्तक, ट्यूटोरियल या सीधे चरण विधि द्वारा सही कदम दे सकता है?कस्टम प्रोग्रेस बार?

आपके समय के लिए धन्यवाद।

उत्तर

15

जैसा कि दिखाया गया है here आप कस्टम स्क्रॉल बार को प्रभाव के रूप में प्राप्त करने के लिए छवि दृश्यों का उपयोग कर सकते हैं।

कि उदाहरण में कस्टम प्रगति बार के लिए लेआउट एक्सएमएल है:

<RelativeLayout android:id="@+id/RelativeLayout01" 
    android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" 
    android:gravity="center" android:layout_height="wrap_content" 
    android:paddingLeft="30sp" android:paddingRight="30sp"> 
    <ImageView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/progress_1" 
     android:id="@+id/imgOne" android:tag="1"></ImageView> 
    <ImageView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/progress_2" 
     android:id="@+id/imgTwo" android:layout_toRightOf="@id/imgOne" 
     android:tag="2"></ImageView> 
    <ImageView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/progress_3" 
     android:id="@+id/imgThree" android:layout_toRightOf="@id/imgTwo" 
     android:tag="3"></ImageView> 
    <TextView android:id="@+id/TextView01" android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/imgThree" android:layout_width="wrap_content" 
     android:layout_alignTop="@id/imgThree" android:layout_alignBottom="@id/imgThree" 
     android:gravity="bottom" android:text="Please Wait..."></TextView> 
</RelativeLayout> 

और फिर उसने वर्ग फ़ाइल में छवियों की एक सूची बनाता है के रूप में:

/** 
* Loads the layout and sets the initial set of images 
*/ 
private void prepareLayout() { 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.myprogressbar, null); 
    addView(view); 

    imageHolders = new ArrayList<ImageView>(); 
    imageHolders.add((ImageView) view.findViewById(R.id.imgOne)); 
    imageHolders.add((ImageView) view.findViewById(R.id.imgTwo)); 
    imageHolders.add((ImageView) view.findViewById(R.id.imgThree)); 

    // Prepare an array list of images to be animated 
    images = new ArrayList<String>(); 

    images.add("progress_1"); 
    images.add("progress_2"); 
    images.add("progress_3"); 
    images.add("progress_4"); 
    images.add("progress_5"); 
    images.add("progress_6"); 
    images.add("progress_7"); 
    images.add("progress_8"); 
    images.add("progress_9"); 
} 

फिर वह एक धागा है कि सोता है शुरू होता है 0.3 सेकंड के लिए और handler.sendEmptyMessage(0); साथ हैंडलर कॉल करता है और अंत में हैंडलर में वह छवियों के काम के बाकी कार्य करें:

@Override 
public void handleMessage(Message msg) { 
    int currentImage = 0; 
    int nextImage = 0; 
    // Logic to change the images 
    for (ImageView imageView : imageHolders) { 
     currentImage = Integer.parseInt(imageView.getTag().toString()); 
     if (currentImage < 9) { 
      nextImage = currentImage + 1; 
     } else { 
      nextImage = 1; 
     } 
     imageView.setTag("" + nextImage); 
     imageView.setImageResource(getResources().getIdentifier(
       images.get(nextImage - 1), "drawable", 
       "com.beanie.example")); 
    } 
    super.handleMessage(msg); 
} 

here और here पर भी एक नज़र डालें।

+0

आपने मेरा दिन बनाया। वास्तव में मुझे क्या चाहिए। – JehandadK

1

मैं हैरी जॉय की सिफारिश करने के लिए नींव के रूप में Custom Progress Bar with Round Corners का उपयोग कर समाप्त हुआ। हालांकि, यदि आप एंड्रॉइड के एसडीके संस्करण की समान कार्यक्षमता चाहते हैं, तो प्रोग्रेसबार कक्षा से intermediate मुझे कुछ बदलाव करना पड़ा। मेरे द्वारा किए गए परिवर्तन एक इंटरमीडिएट को परिभाषित और एनिमेटेड करने योग्य बनाने में सक्षम बनाता है।

सुनिश्चित करें कि आप निर्देश here का पालन करते हैं, लेकिन इस के साथ RoundProgress वर्ग की जगह:

public class RoundProgress extends RelativeLayout { 
private ImageView progressDrawableImageView; 
private ImageView trackDrawableImageView; 
private ImageView backGroundImageView; 
private double max = 100; 
private AttributeSet attrs2 ; 
private Transformation mTransformation; 
private AlphaAnimation mAnimation; 
private int mBehavior; 
private int mDuration; 
private Interpolator mInterpolator; 
private static Context ctx; 
private int bgResource; 

public int getMax() { 
    Double d = new Double(max); 
    return d.intValue(); 
} 

public double getMaxDouble() { 
    return max; 
} 

public void setMax(int max) { 
    Integer maxInt = new Integer(max); 
    maxInt.doubleValue(); 
    this.max = max; 
} 

public void setMax(double max) { 
    this.max = max; 
} 

public RoundProgress(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    inflater.inflate(R.layout.round_progress, this); 
    setup(context, attrs); 
} 

protected void setup(Context context, AttributeSet attrs) 
{ 
    attrs2 = attrs; 
    ctx = context; 
    TypedArray a = context.obtainStyledAttributes(attrs, 
     R.styleable.RoundProgress); 
    //setBackgroundResource(R.drawable.custom_loading_bg); 
    backGroundImageView = (ImageView) findViewById(R.id.background_image_view); 
    backGroundImageView.setBackgroundResource(R.drawable.custom_loading_bg); 


    final String xmlns="http://schemas.android.com/apk/res/com.digiphd.prospec"; 
    bgResource = attrs.getAttributeResourceValue(xmlns, 
      "progressDrawable", 0); 
    progressDrawableImageView = (ImageView) findViewById(
      R.id.progress_drawable_image_view); 

    progressDrawableImageView.setBackgroundResource(bgResource); 

    int trackResource = attrs.getAttributeResourceValue(xmlns, "track", 0); 
    trackDrawableImageView = (ImageView) findViewById(R.id.track_image_view); 
    trackDrawableImageView.setBackgroundResource(trackResource); 

    int progress = attrs.getAttributeIntValue(xmlns, "progress", 0); 
    setProgress(progress); 
    int max = attrs.getAttributeIntValue(xmlns, "max", 100); 
    setMax(max); 

    int numTicks = attrs.getAttributeIntValue(xmlns, "numTicks", 0); 

    a.recycle(); 

    ProgressBarOutline outline = new ProgressBarOutline(context); 
    //addView(outline); 


} 

public void setProgress(Integer value) 
{ 
    setProgress((double) value); 
} 

public void setProgress(double value) { 
    ClipDrawable drawable = (ClipDrawable) 
      progressDrawableImageView.getBackground(); 
    double percent = (double) value/ (double)max; 
    int level = (int)Math.floor(percent*10000); 

    drawable.setLevel(level); 
} 

public void setIntermediate(boolean t) 
{ 
    if(t){ 
     progressDrawableImageView.setBackgroundResource(R.drawable.custom_intermediate_bg); 
     startAnimation(); 
    }else{ 
     progressDrawableImageView.clearAnimation(); 
     progressDrawableImageView.setBackgroundResource(bgResource); 

    } 
} 

/** 
* <p>Start the indeterminate progress animation.</p> 
*/ 
void startAnimation() { 
    int visibility = getVisibility(); 
    if (visibility != VISIBLE) { 
     return; 
    } 
    Log.d("INTERMEDIATE","ANIMATION START!"); 
    mDuration = 1000; 

     if (mInterpolator == null) { 
      mInterpolator = new LinearInterpolator(); 
     } 

     mTransformation = new Transformation(); 
     mAnimation = new AlphaAnimation(0.0f, 1.0f); 
     mAnimation.setRepeatMode(Animation.REVERSE); 
     mAnimation.setRepeatCount(Animation.INFINITE); 
     mAnimation.setDuration(mDuration); 
     mAnimation.setInterpolator(mInterpolator); 
     mAnimation.setStartTime(Animation.START_ON_FIRST_FRAME); 
     progressDrawableImageView.startAnimation(mAnimation); 


} 
} 
अपनी गतिविधि में

अब, आप बस फोन कर सकते हैं .setIntermediate (सही या गलत) जरूरत पड़ने पर।

संबंधित मुद्दे