2014-10-10 78 views
0

在我的應用程序,我有一個自定義進度欄的Android定製的進度條文件

progress.xml

<ProgressBar 
    android:id="@+id/progressBar1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:progressDrawable="@drawable/loader" /> 

我的gif文件

My gif image

我想創建與此圖像的進度條

換句話說,我想顯示此每當我從服務器上下載數據和下載數據

,或者你可以說,後刪除它如何

+0

您能找到解決方案嗎? – 2015-04-06 11:49:27

+0

Android不支持git圖像。您必須在Drawable文件夾中使用不同的圖像併爲它們設置動畫。 請遵循以下問題: - [link](http://stackoverflow.com/questions/19900747/custom-progress-dialog-with-squre-image-rotation-with-asyntask) – 2015-04-08 11:01:27

+0

如果您需要再次使用gif文件,我建議你使用[this](http://abhinavasblog.blogspot.in/2014/04/animated-gif-imageview-library-for.html)庫,而不是使用多個圖像。這太簡單和高效。 :) – 2015-04-08 11:14:28

回答

8
  • 首先CONVER你的GIF圖片顯示此圖像作爲進度條爲PNG切片圖像序列圖像。
  • 將您的進度欄聲明爲圖像視圖。

    <ImageView 
        android:id="@+id/main_progress" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:visibility="visible" /> 
    
  • 在繪製文件夾中使用這些從GIF生成您的巴紐序列圖像創建.xml文件。

    <?xml version="1.0" encoding="utf-8"?> 
        <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
        android:oneshot="false"> 
    <item 
        android:drawable="@mipmap/wblod_0" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_1" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_2" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_3" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_4" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_5" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_6" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_7" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_8" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_9" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_10" 
        android:duration="40" /> 
    <item 
        android:drawable="@mipmap/wblod_11" 
        android:duration="40" /> 
    </animation-list> 
    
  • 在主要活動中設置這樣的代碼,

    private AnimationDrawable animationDrawable; 
    private ImageView mProgressBar; 
    mProgressBar.setBackgroundResource(R.drawable.loading_web_animation); 
    animationDrawable = (AnimationDrawable)mProgressBar.getBackground(); 
    mProgressBar.setVisibility(View.VISIBLE); 
    animationDrawable.start(); 
    mProgressBar.setVisibility(View.GONE); 
    animationDrawable.stop();` 
    
1

我覺得我來不及回答這個問題,但你也可以試試這個。

XML

<FrameLayout 
       android:id="@+id/progress_container" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerInParent="true"> 
       <ProgressBar 
        android:id="@+id/circular_progress" 
        android:layout_width="100dp" 
        android:layout_height="100dp" 
        android:indeterminateDrawable="@drawable/my_progress_indeterminate" 
        /> 
       <TextView 
        android:id="@+id/circular_progress_counter" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:textSize="@dimen/text_size_big" 
        android:textColor="@color/white" 
        android:text="10"/> 
      </FrameLayout> 

my_progress_indeterminate.xml

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

在Java文件登錄顯示計時器。這裏我使用了10秒計時器。

private void progressTimer() { 
     handler = new Handler(); 

     if (maxCount >= 0) { 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        /* 
        Logic to set Time inside Progressbar 
        */ 

        mCircularProgressCounter.setText(maxCount+""); 

        maxCount = maxCount - 1; 
        pickupTimer(); 

       } 
      }, 1000); 
     } 
    } 

Result 

enter image description here

+0

它給予比預期的慢動畫。任何解決方案 – HBB20 2017-03-13 11:19:41

0

放入/ RES你的gif圖片/原始文件夾

在你的類聲明mProgressDialog

TransparentProgressDialog mProgressDialog; 

然後使用下面的代碼,以顯示進度對話框

if (mProgressDialog == null) 
    mProgressDialog = new TransparentProgressDialog(this); 
if (mProgressDialog.isShowing()) 
    mProgressDialog.dismiss(); 
    mProgressDialog.setTitle(getResources().getString(R.string.title_progress_dialog)); 
    mProgressDialog.setCancelable(false); 
    mProgressDialog.show(); 

創建一個類TransparentProgressDialog,其中.gif可以使用Glide庫加載。

public class TransparentProgressDialog extends Dialog { 

private ImageView iv; 

public TransparentProgressDialog(Context context) { 
    super(context, R.style.TransparentProgressDialog); 
    WindowManager.LayoutParams wlmp = getWindow().getAttributes(); 
    wlmp.gravity = Gravity.CENTER_HORIZONTAL; 
    getWindow().setAttributes(wlmp); 
    setTitle(null); 
    setCancelable(false); 
    setOnCancelListener(null); 
    LinearLayout layout = new LinearLayout(context); 
    layout.setOrientation(LinearLayout.VERTICAL); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    iv = new ImageView(context); 
    GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(iv); 
    Glide.with(context).load(R.raw.gif_loader).into(imageViewTarget); 

    layout.addView(iv, params); 
    addContentView(layout, params); 
} 

@Override 
public void show() { 
    super.show(); 
} 

}