我正在尝试创建一个顺序加载动画,显示5个点,这些点一个接一个地变黑,以显示加载动画。我已经建立了动画 - 但到目前为止 - 只有一个点变成黑色 - 我试图转动第二个黑色似乎不起作用(一旦我弄清楚如何动画它我会将方法应用于剩余的3个点 - 只是让你知道代码到底在哪里 - 我只是试图在这一点上设置第二个点的动画但它不起作用 - 第一个点应该闪烁 - 然后其他4个点没有任何反应动画)
-Amani Swann
try {
// updating layout initially has updating text with 1 dot in the xml
setContentView(R.layout.updating);
// This image view has the updating text to be progressively updated
// with dots addition
ImageView loading = (ImageView) findViewById(R.id.loading_empty1);
//Button goButton = (Button) findViewById(R.id.loading_empty);
// Set updating button to drawable animation
loading.setBackgroundResource(R.drawable.updating1);
loadingAnimation = (AnimationDrawable) loading.getBackground();
ImageView loading2 = (ImageView) findViewById(R.id.loading_empty2);
//Button goButton = (Button) findViewById(R.id.loading_empty);
// Set updating button to drawable animation
loading2.setBackgroundResource(R.drawable.updating2);
loadingAnimation = (AnimationDrawable) loading2.getBackground();
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/loading_empty" android:duration="500" />
<item android:drawable="@drawable/loading_full" android:duration="500" />
</animation-list>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/loading_empty" android:duration="500" />
<item android:drawable="@drawable/loading_full" android:duration="500" />
</animation-list>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background"
android:orientation="vertical" >
<TextView
android:id="@+id/updating_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/updating_text"
android:textColor="#000000"
android:textSize="14sp" />
<ImageView
android:id="@+id/loading_empty1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="150dp"
android:layout_toLeftOf="@+id/loading_empty2"
android:layout_marginBottom="20dp"
android:layout_marginRight="15dp"
android:background="@drawable/updating1"
android:src="@drawable/loading_empty" />
<ImageView
android:id="@+id/loading_empty3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/loading_empty2"
android:layout_centerHorizontal="true"
android:background="@drawable/updating3"
android:layout_marginRight="15dp"
android:src="@drawable/loading_empty" />
<ImageView
android:id="@+id/loading_empty2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/loading_empty1"
android:layout_toLeftOf="@+id/loading_empty3"
android:background="@drawable/updating2"
android:layout_marginRight="15dp"
android:src="@drawable/loading_empty" />
<ImageView
android:id="@+id/loading_empty4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/loading_empty3"
android:layout_toRightOf="@+id/loading_empty3"
android:background="@drawable/updating4"
android:layout_marginRight="15dp"
android:src="@drawable/loading_empty" />
<ImageView
android:id="@+id/loading_empty5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/loading_empty4"
android:layout_toRightOf="@+id/loading_empty4"
android:background="@drawable/updating5"
android:src="@drawable/loading_empty" />
</RelativeLayout>
答案 0 :(得分:2)
为什么不为此使用动画列表? 4个点作为1个图像,动画列表中的每个项目作为动画中的一个帧?
喜欢这个http://android-er.blogspot.com/2012/01/create-frame-animation-with.html
答案 1 :(得分:1)
这可以使用Android的单个ImageView
,animation-list
和AnimationDrawable
类来完成。
drawable
文件夹中复制五张图片。drawable
。{/ li>的animation-list
文件夹中创建XML文件
ImageView
。getDrawable()
从xml获取每张图片。例如,假设您创建了五个点的图像,其名称为 dot01.png,dot02.png,dot03.png,dot04.png,dot05..png ,然后是{{{x>文件中的xml文件1}}文件夹应该是,
drawable
现在将xml设置为<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/dot01"
android:duration="150"/>
<item
android:drawable="@drawable/dot02"
android:duration="150"/>
<item
android:drawable="@drawable/dot03"
android:duration="150"/>
<item
android:drawable="@drawable/dot04"
android:duration="150"/>
<item
android:drawable="@drawable/dot05"
android:duration="150"/>
<!-- Reset to original -->
<item
android:drawable="@drawable/dot01"
android:duration="10"/>
</animation-list>
中的图像资源,然后从ImageView
实例的start()
方法启动动画,
AnimationDrawable
上面的代码可以工作,但它只会使图像动画一次,这是因为android中的一个错误,android认为动画即使已经结束也仍在运行。解决方案是使用ImageView DotAnimImage = (ImageView) findViewById(R.id.imageView1);
// dots_animation below is the name of your xml file.
DotAnimImage.setImageResource(R.drawable.dots_animation);
// Now create a reference to getDrawable
AnimationDrawable dotsAnimation = (AnimationDrawable) DotAnimImage.getDrawable();
// Start animation
dotsAnimation.start();
实例的isRunning()
方法检查动画是否正在运行,并使用AndroidDrawable
方法手动停止它,
stop()
你的最终代码应该是,
//Check if animation is running and stop it,
if (dotsAnimation.isRunning()) {
dotsAnimation.stop();
// start again,
dotsAnimation.start();
}