参考文章: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);

}

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

你试试如何?

android动态加载背景,Android六种加载动态图的方式(包括动态背景和加载动态图片)之四...相关推荐

  1. java加载pmml模型文件报错_PMML总结与思考PMML模型生成和加载示例

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

  2. unity保存加载慢_掌握Unity 5中的保存和加载功能

    unity保存加载慢 Thanks to Vincent Quarles for kindly helping to peer review this article. 感谢Vincent Quarl ...

  3. PyTorch 深度剖析:如何保存和加载PyTorch模型?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨科技猛兽 编辑丨极市平台 导读 本文详解了PyTorch 模型 ...

  4. 保存和加载pytorch模型

    当保存和加载模型时,需要熟悉三个核心功能: torch.save:将序列化对象保存到磁盘.此函数使用Python的pickle模块进行序列化.使用此函数可以保存如模型.tensor.字典等各种对象. ...

  5. pytorch模型的保存和加载、checkpoint

    pytorch模型的保存和加载.checkpoint 其实之前笔者写代码的时候用到模型的保存和加载,需要用的时候就去度娘搜一下大致代码,现在有时间就来整理下整个pytorch模型的保存和加载,开始学习 ...

  6. Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤

    第一步.先制做一个有我们需要的图片资源的APK 如下图,这里有个about_log.png,我们需要生成apk文件. 生成的apk文件如果你不到项目的文件夹里面去取apk,想通过命令放到手机里面去可以 ...

  7. android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...

    本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里 ...

  8. Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...

    前言  Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://ov ...

  9. Android:ViewPager详解(异步网络加载图片,带图片缓存,并带导航小圆点)

    android 应用中,如欢迎指引页面, 和图片轮播功能, 或者更多的内容在一页显示不了,要分成多个页面,这时候viewpager是很好用的. 首先看下效果: 下面是一个例子,带异步网络加载图片,并带 ...

最新文章

  1. 设计模式C++实现(2)——策略模式
  2. 利用System.Net.Mail 的SmtpClient发送邮件
  3. mysql索引详细介绍简书_Mysql索引介绍
  4. 重磅 | 第八届世界华人数学家大会将在清华大学举行
  5. 【第九课】MriaDB密码重置和慢查询日志
  6. 轻松让Ubunt虚拟机访问windows宿主机(本地硬盘)
  7. 医院绩效考核和奖金分配方案
  8. 简单验证码图片识别BMP,C,C++,C#,JAVA,脚本-网络攻防大赛笔记(1)
  9. 如何电脑上怎样查看微信聊天记录
  10. 数据中台漫谈 — 数据接入
  11. shell脚本练习题(编程题)。
  12. 2020年显卡天梯图
  13. 公众号运营-Datawhale-1
  14. 介绍下我的Phx框架-A Tiny assembled RESTful PHP Frame...
  15. JavaScript模拟退火
  16. FTP错误详解及解决方案
  17. T级攻防:大规模DDOS防御架构
  18. 计算机应用基础课程的评价方法,对计算机应用基础课程评价方法探讨.doc
  19. 手把手教你使用ADB卸载手机内置App软件
  20. Linux shell中进制转换

热门文章

  1. 元气森林的企业数字化运营之道
  2. slam过去与未来1_what_salm
  3. 【题库】上海市学校心理咨询师-发展心理学-考点解析 2.5 相互作用论
  4. Java知识点——网络编程(如何网络编程和多线程实现tcp基础多文件交换功能)
  5. YOLO V3基于Tensorflow 2.0的完整实现
  6. 尺子在线测量怎么做?这个方案快收藏了
  7. 传统pos及与智能还款、智能代还App,该如何选择?
  8. 冒泡算法c语言伪代码,求冒泡排序的全中文的伪代码 ?
  9. flume 数据存入mysql(二)对敏感信息加密
  10. vue实现前端Excel分页显示