参考文章:http://www.cnblogs.com/firecode/archive/2012/11/01/2749774.html

其实这篇文章已经写的很全面,我只是用了一下将它加入到我的demo中,并实现了文章中最后提到的一个加载方式,并做了一些稍微改动。(此处:向前辈致敬!)

这种方式的原理就是加载一个动画,并在ImageView中显示出来,大体上也是分三步

第一步:

在res/anim文件夹下创建一个动画文件,dynamic4.xml,内容如下:

android:oneshot="false" >

android:drawable="@drawable/tcc1"

android:duration="100"/>

android:drawable="@drawable/tcc2"

android:duration="100"/>

android:drawable="@drawable/tcc3"

android:duration="100"/>

android:drawable="@drawable/tcc4"

android:duration="100"/>

android:drawable="@drawable/tcc5"

android:duration="100"/>

android:drawable="@drawable/tcc6"

android:duration="100"/>

android:drawable="@drawable/tcc7"

android:duration="100"/>

第二步:

加载配置文件,这个跟我们平时加载配置文件是一样的,在layout建立activity_dynamic4.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center_horizontal"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:orientation="horizontal" >

android:id="@+id/btn41"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="第二种加载方法" />

android:id="@+id/btn42"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="第三种加载方法" />

android:id="@+id/btn43"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="第四种加载方法" />

android:id="@+id/imageView4"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

第三步:

打开我们的DynamicActivity4文件,加入以下代码:

package com.tcc.dynamicbackground;

import android.app.Activity;

import android.graphics.drawable.AnimationDrawable;

import android.os.AsyncTask;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewTreeObserver.OnPreDrawListener;

import android.widget.Button;

import android.widget.ImageView;

public class DynamicActivity4 extends Activity implements OnClickListener {

private ImageView imageView;

private Button btn41, btn42, btn43;

AnimationDrawable animationDrawable;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_dynamic4);

init();

}

private void init() {

// TODO Auto-generated method stub

btn41 = (Button) findViewById(R.id.btn41);

btn41.setOnClickListener(this);

btn42 = (Button) findViewById(R.id.btn42);

btn42.setOnClickListener(this);

btn43 = (Button) findViewById(R.id.btn43);

btn43.setOnClickListener(this);

imageView = (ImageView) findViewById(R.id.imageView4);

imageView.setOnClickListener(this);

imageView.setBackgroundResource(R.anim.dynamic4);

animationDrawable = (AnimationDrawable) imageView.getBackground();

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.btn41:

playAnimation1();

break;

case R.id.btn42:

playAnimation2();

break;

case R.id.btn43:

playAnimation3();

break;

case R.id.imageView4:

animationDrawable.stop();

break;

default:

break;

}

}

// 方法一:在Activity启动时会自动运行动画

@Override

public void onWindowFocusChanged(boolean hasFocus)

{

animationDrawable.start();

super.onWindowFocusChanged(hasFocus);

}

void playAnimation1() {

// 方法二:使用Runnalbe()来加载

imageView.post(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

animationDrawable.start();

}

});

// 注意:此处一定要用getBackground();不能用getdrawable()方法,会没效果。原因如下:

// 由于我们使用的是imageView的setBackgroundResource方法设置的资源背景,相当于布局文件中的android:background属性,

// 这个属性是view类的属性,必须通过getBackground()方法来获取;而getdrawable()是imageview类的方法,

// 必须通过在代码中setImageResource(int)(对应布局文件的android:src)

// 或setImageDrawable(Drawable drawable)方法设置才可以使用getdrawable()方法。

}

void playAnimation2() {

// 方法三:使用AsyncTask异步加载启动

class RunAnim extends AsyncTask {

@Override

protected String doInBackground(String... params) {

// TODO Auto-generated method stub

if (!animationDrawable.isRunning()) {

animationDrawable.stop();

animationDrawable.start();

}

return "";

}

}

RunAnim runAnim = new RunAnim();

runAnim.execute("");

}

void playAnimation3() {

// 方法四:通过添加addOnPreDrawListener来自动加载 (我是用这个,感觉很好用)

// 注意这里,如果你的图片控件用的是setImageResource ,你这里应该使用getDrawable();

OnPreDrawListener preDrawListener = new OnPreDrawListener() {

@Override

public boolean onPreDraw() {

animationDrawable.start();

return true; // 必须要有这个true返回

}

};

imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);

}

}其中第三中方法时不时的会出错,能避开就尽量不要用。

你试试如何?

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐