Android ImageView实现类似Gif动图的效果
2015-08-26 19:09
591 查看
已经过时的方法:
android studio会报错:错误行:imageView.setBackgroundResource(R.anim.framebyframe);
错误为:expected resource of type
[/code]stackoverflow描述:http://stackoverflow.com/questions/24716385/android-studios-expected-resource-of-type-checks
错误原因; AS checks that some
intparameters
are not arbitrary integers, but rather have some properties.
新建一个framebyframe.xml文件
[java] view
plaincopy
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/an01" android:duration="1000" />
<item android:drawable="@drawable/an02" android:duration="1000" />
<item android:drawable="@drawable/an03" android:duration="2000" />
</animation-list>
<!--
oneshot :是否只播放一遍动画 true 播放一遍 false 循环播放
默认就是false
-->
下边 就是具体代码实现了:
[java] view
plaincopy
public class SplashActivity extends Activity {
private ImageView imageView;
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 帧动画
imageView = (ImageView) findViewById(R.id.imageView1);
// 第一种方式实现 动画
/*animationDrawable = (AnimationDrawable) getResources().getDrawable(
R.anim.framebyframe);
imageView.setBackgroundDrawable(animationDrawable);*/
// 第二种方式实现动画
imageView.setBackgroundResource(R.anim.framebyframe);
animationDrawable = (AnimationDrawable) imageView.getBackground();
animationDrawable.start();//开始
// animationDrawable.setOneShot(false);是否循环播放
// animationDrawable.stop();停止播放
// animationDrawable.isRunning();//是否播放
// animationDrawable.getNumberOfFrames();//播放帧
// animationDrawable.getFrame(index); 返回制定索引的 Drawable对象
// animationDrawable.getDuration(i);停留的时间
//延迟三秒 跳转
new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
//声明意图对象 实现 跳转
Intent intent = new Intent(SplashActivity.this,
MainActivity.class);
startActivity(intent);
}
};
}.sendEmptyMessageDelayed(1, 3000);//三秒
}
/* @Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
animationDrawable.start();
return true;
}
return super.onTouchEvent(event);
}
*/
}
正确方法:
第一步:先上图片素材,以下素材放到res/drawable目录下:/article/7842738.html
图片素材: | ||||||
文件名称: | icon1.png | icon2.png | icon3.png | icon4.png | icon5.png | icon6.png |
顺序显示动画文件:animation1.xml
[html] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<!--
根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
根标签下,通过item标签对动画中的每一个图片进行声明
android:duration 表示展示所用的该图片的时间长度
-->
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"
>
<item android:drawable="@drawable/icon1" android:duration="150"></item>
<item android:drawable="@drawable/icon2" android:duration="150"></item>
<item android:drawable="@drawable/icon3" android:duration="150"></item>
<item android:drawable="@drawable/icon4" android:duration="150"></item>
<item android:drawable="@drawable/icon5" android:duration="150"></item>
<item android:drawable="@drawable/icon6" android:duration="150"></item>
</animation-list>
倒序显示动画文件:animation2.xml
[html] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<!--
根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
根标签下,通过item标签对动画中的每一个图片进行声明
android:duration 表示展示所用的该图片的时间长度
-->
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"
>
<item android:drawable="@drawable/icon6" android:duration="150"></item>
<item android:drawable="@drawable/icon5" android:duration="150"></item>
<item android:drawable="@drawable/icon4" android:duration="150"></item>
<item android:drawable="@drawable/icon3" android:duration="150"></item>
<item android:drawable="@drawable/icon2" android:duration="150"></item>
<item android:drawable="@drawable/icon1" android:duration="150"></item>
</animation-list>
第三步:上布局文件,放在res/layout目录下,文件名main.xml:
[html] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ImageView android:id="@+id/animationIV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:src="@drawable/animation1"/>
<Button android:id="@+id/buttonA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:text="顺序显示" />
<Button android:id="@+id/buttonB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:text="停止" />
<Button android:id="@+id/buttonC"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:text="倒序显示" />
</LinearLayout>
第四步:上Activity文件,文件名:MainActivity.java
[java] view
plaincopy
package org.shuxiang.test;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
public class Activity10 extends Activity
{
private ImageView animationIV;
private Button buttonA, buttonB, buttonC;
private AnimationDrawable animationDrawable;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.test10);
animationIV = (ImageView) findViewById(R.id.animationIV);
buttonA = (Button) findViewById(R.id.buttonA);
buttonB = (Button) findViewById(R.id.buttonB);
buttonC = (Button) findViewById(R.id.buttonC);
buttonA.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
animationIV.setImageResource(R.drawable.animation1);
animationDrawable = (AnimationDrawable) animationIV.getDrawable();
animationDrawable.start();
}
});
buttonB.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
animationDrawable = (AnimationDrawable) animationIV.getDrawable();
animationDrawable.stop();
}
});
buttonC.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
animationIV.setImageResource(R.drawable.animation2);
animationDrawable = (AnimationDrawable) animationIV.getDrawable();
animationDrawable.start();
}
});
}
}
相关文章推荐
- android---总结View以及ViewGroup的触摸屏传递机制
- 使用百度地图开发一个导航定位demo-android学习之旅(77)
- 使用百度地图开发一个导航定位demo-android学习之旅(77)
- 使用百度地图开发一个导航定位demo-android学习之旅(77)
- 使用百度地图开发一个导航定位demo-android学习之旅(77)
- TextView打字机效果
- Android 动画录制 GIF录制
- Android安卓四大组件
- 欢迎使用CSDN-markdown编辑器
- Android ListView 常见问题汇总 checkbox 点击 复用混乱
- Android 视频录制 动态图
- eclipse中为android工程第三方jar包关联源代码的方法
- android中<include />标签的用法
- android布局include的用法
- 写的还不错的专题,android性能优化
- 写的还不错的专题,android性能优化
- 写的还不错的专题,android性能优化
- RelativeLayout常用属性介绍
- Android Studio : 修改Debug签名的Key
- android Jvm 笔记。内存溢出。内存区域划分。垃圾回收气