android动态加载背景,Android六种加载动态图的方式(包括动态背景和加载动态图片)之四...
参考文章:http://www.cnblogs.com/firecode/archive/2012/11/01/2749774.html其实这篇文章已经写的很全面,我只是用了一下将它加入到我的demo中,并实现了文章中最后提到的一个加载方式,并做了一些稍微改动。(此处:向前辈致敬!)这种方式的原理就是加载一个动画,并在ImageView中显示出来,大体上也是分三步第一步:在res/anim文件夹下
参考文章: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);
}
}其中第三中方法时不时的会出错,能避开就尽量不要用。
你试试如何?
更多推荐
所有评论(0)