android动态加载背景,Android六种加载动态图的方式(包括动态背景和加载动态图片)之四...
参考文章: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六种加载动态图的方式(包括动态背景和加载动态图片)之四...相关推荐
- java加载pmml模型文件报错_PMML总结与思考PMML模型生成和加载示例
在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...
- unity保存加载慢_掌握Unity 5中的保存和加载功能
unity保存加载慢 Thanks to Vincent Quarles for kindly helping to peer review this article. 感谢Vincent Quarl ...
- PyTorch 深度剖析:如何保存和加载PyTorch模型?
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨科技猛兽 编辑丨极市平台 导读 本文详解了PyTorch 模型 ...
- 保存和加载pytorch模型
当保存和加载模型时,需要熟悉三个核心功能: torch.save:将序列化对象保存到磁盘.此函数使用Python的pickle模块进行序列化.使用此函数可以保存如模型.tensor.字典等各种对象. ...
- pytorch模型的保存和加载、checkpoint
pytorch模型的保存和加载.checkpoint 其实之前笔者写代码的时候用到模型的保存和加载,需要用的时候就去度娘搜一下大致代码,现在有时间就来整理下整个pytorch模型的保存和加载,开始学习 ...
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
第一步.先制做一个有我们需要的图片资源的APK 如下图,这里有个about_log.png,我们需要生成apk文件. 生成的apk文件如果你不到项目的文件夹里面去取apk,想通过命令放到手机里面去可以 ...
- android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...
本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里 ...
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...
前言 Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://ov ...
- Android:ViewPager详解(异步网络加载图片,带图片缓存,并带导航小圆点)
android 应用中,如欢迎指引页面, 和图片轮播功能, 或者更多的内容在一页显示不了,要分成多个页面,这时候viewpager是很好用的. 首先看下效果: 下面是一个例子,带异步网络加载图片,并带 ...
最新文章
- 设计模式C++实现(2)——策略模式
- 利用System.Net.Mail 的SmtpClient发送邮件
- mysql索引详细介绍简书_Mysql索引介绍
- 重磅 | 第八届世界华人数学家大会将在清华大学举行
- 【第九课】MriaDB密码重置和慢查询日志
- 轻松让Ubunt虚拟机访问windows宿主机(本地硬盘)
- 医院绩效考核和奖金分配方案
- 简单验证码图片识别BMP,C,C++,C#,JAVA,脚本-网络攻防大赛笔记(1)
- 如何电脑上怎样查看微信聊天记录
- 数据中台漫谈 — 数据接入
- shell脚本练习题(编程题)。
- 2020年显卡天梯图
- 公众号运营-Datawhale-1
- 介绍下我的Phx框架-A Tiny assembled RESTful PHP Frame...
- JavaScript模拟退火
- FTP错误详解及解决方案
- T级攻防:大规模DDOS防御架构
- 计算机应用基础课程的评价方法,对计算机应用基础课程评价方法探讨.doc
- 手把手教你使用ADB卸载手机内置App软件
- Linux shell中进制转换