这个问题已被提出,但我没有找到任何合适的答案,所以我发布了这个问题。
我有一个ProgressBar
动画,它有多个图像,并像进度条那样加载这些图像。我能够在4.0及更高版本中成功运行它,但它在2.3中不起作用。如何使它在较低版本中运行?
我的动画可绘制XML文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
android:pivotX="50%"
android:pivotY="50%" >
<item android:drawable="@drawable/p1_wheel" android:duration="200"/>
<item android:drawable="@drawable/p2_wheel" android:duration="200"/>
<item android:drawable="@drawable/p3_wheel" android:duration="200"/>
<item android:drawable="@drawable/p4_wheel" android:duration="200"/>
<item android:drawable="@drawable/p5_wheel" android:duration="200"/>
<item android:drawable="@drawable/p6_wheel" android:duration="200"/>
<item android:drawable="@drawable/p7_wheel" android:duration="200"/>
<item android:drawable="@drawable/p8_wheel" android:duration="200"/>
<item android:drawable="@drawable/p9_wheel" android:duration="200"/>
<item android:drawable="@drawable/p10_wheel" android:duration="200"/>
<item android:drawable="@drawable/p11_wheel" android:duration="200"/>
<item android:drawable="@drawable/p12_wheel" android:duration="200"/>
</animation-list>
我的XML文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerInParent="true"/>
</RelativeLayout>
我的Java文件
package com.example.progressbarsample;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.DrawableContainer;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
ImageView progressbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressbar = (ImageView) findViewById(R.id.imageView1);
progressbar.setBackgroundResource(R.drawable.progressbar);
final AnimationDrawable frame = (AnimationDrawable) progressbar.getBackground();
progressbar.post(new Runnable() {
@Override
public void run() {
frame.start();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
答案 0 :(得分:1)
最后我找到了解决方案。
progressbar = (ImageView) findViewById(R.id.imageView1);
progressbar.setBackgroundResource(R.drawable.progressbar);
final AnimationDrawable frame = (AnimationDrawable)getResources.getDrawable(R.drawable.progressbar); \\progressbar is the anim.xml file
progressbar.setBackgroundDrawable(frame);
progressbar.post(new Runnable() {
@Override
public void run() {
frame.start();
}
});
}
答案 1 :(得分:1)
在视图可见之后尝试制作动画:
@Override
public void onWindowFocusChanged (bool hasFocus)
{
super.onWindowFocusChanged (hasFocus);
//get the animation from your view
AnimationDrawable explosionAnimation = (AnimationDrawable) mImageView.getBackground();
//set it visible and start animation
explosionAnimation.setVisible (true, true);
explosionAnimation.start ();
}
在视图已经可见并且它获得焦点后,将调用Activity中的方法 onWindowFocusChanged 。因此,您将能够为图像制作动画。 我试过没有 setVisible ,但只显示了静态图像。当我从onResume,onStart等开始动画时也会发生同样的情况。 上面的代码对我来说很好,包括Android 2.3。我目前正在使用mono(与Xamarin合作),但我希望它能用Java为你工作。
答案 2 :(得分:0)
我使用过Drawable Animations,它在我的代码中适用于我:
mImageView.setBackgroundResource(R.drawable.anim);
AnimationDrawable explosionAnimation = (AnimationDrawable) mImageView.getBackground();
explosionAnimation.start();
但是我认为这是对帖子的考虑,不使用progressbar.post
尝试代码