您的位置:首页 > 移动开发 > Android开发

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
int
parameters
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
第二步:上动画Animation-list帧布局文件,有2个,一个是按顺序显示动画,一个是倒序显示动画,文件存放在res/drawable目录下

顺序显示动画文件: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();

}

});

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: