Android:动画循环进度drawable

时间:2014-06-18 08:34:15

标签: android android-layout animation drawable android-drawable

我需要一个看起来像旋转进度圈的drawable。那个drawable我想在例如GridView等的ImageView中使用。

所以,根据其他帖子,我从文件夹\ sdk \ platforms \ android-xx \ data \ res \ drawable中获取了progress_medium_holo.xml,如下所示。我还复制了这个drawable使用的PNG文件。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
             android:drawable="@drawable/spinner_48_outer_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="0"
             android:toDegrees="1080" />
    </item>
    <item>
        <rotate
             android:drawable="@drawable/spinner_48_inner_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="720"
             android:toDegrees="0" />
    </item>
</layer-list>

在我的布局中,我使用了这个ImageView,它使用了progress-drawable。

<ImageView
    android:id="@+id/element_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:src="@drawable/progress_medium_holo" />

static progress circle

但结果是静态循环进度。有没有办法通过XML定义动画那个并且不使用代码?

3 个答案:

答案 0 :(得分:4)

有一个名为View的{​​{1}}可以完全按照您的意愿行事。 只需使用此代替ProgressBar

ImageView

答案 1 :(得分:2)

为了创建自定义进度指示器(在您的情况下旋转进度循环)

  1. 创建一个布局文件(.xml)或使用图像(drawable)进行roatating循环。把它放在res。
  2. 的drawable文件夹中
  3. 使用此drawable作为加载指示符布局中imageview的源。
  4. 通过膨胀使用此imageview并在其上调用startLoadingAnimation()。同样,只需在其上调用stopLoadingAnimation()就可以在完成作业后停止动画。
  5. 您必须使用动画才能旋转。

    // start the loading animation
    
    public void startLoadingAnimation(Context context) {
      Animation rotate = AnimationUtils.loadAnimation(context,
        R.anim.anim_rotate);
      rotate.setRepeatMode(Animation.INFINITE);
      mImgView.startAnimation(rotate);
    }
    
    // stop the loading animation
    public void stopLoadingAnimation(){
      mImgView.clearAnimation();
    }
    

    anim_rotate.xml将此文件放入anim

    中的res文件夹中
    <?xml version="1.0" encoding="utf-8"?>
    <rotate
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:fromDegrees="0"
      android:interpolator="@android:anim/linear_interpolator"
      android:toDegrees="360"
      android:pivotX="50%"
      android:pivotY="50%"
      android:duration="500"
      android:startOffset="0"
      android:repeatCount="infinite"
    />
    

答案 2 :(得分:0)

感谢progress_medium_holo.xml。 在我的情况下,标准的ProgressBar(针对API 23)不可见,我尝试了很多变化,只有水平条样式的进度条可见。然后我复制了progress_medium_holo.xml并从文件夹sdk \ platforms \ android-xx \ data \ res \ drawable链接了drawables,最终得到了:

<ProgressBar
    android:id="@+id/progress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:indeterminateDrawable="@drawable/progress_medium_holo"/>