2014-10-10 51 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(); 
} 

}