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

android 动态图gif显示俩种方法

2015-04-02 17:47 148 查看
//使用条件

1》都叫兽 GIF制作(软件):把gif动态图分解成一帧一帧的

*************************************************************************8

*********方法一(逐帧动画):

//dynamic_drawable.xml    设置好逐帧动画的播放逻辑

<?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="false"
>
<item android:drawable="@drawable/icon1" android:duration="100"></item>
<item android:drawable="@drawable/icon2" android:duration="100"></item>
<item android:drawable="@drawable/icon3" android:duration="100"></item>
<item android:drawable="@drawable/icon4" android:duration="100"></item>
<item android:drawable="@drawable/icon5" android:duration="100"></item>
<item android:drawable="@drawable/icon6" android:duration="100"></item>
</animation-list>
<!--在res文件夹下新建一个drawale的文件夹,然后在其下编写自己的xml  <pre name="code" class="html">icon1为一帧一帧的图<span style="font-family: Arial, Helvetica, sans-serif;">--></span>



//定义,初始化,开始播放

frameAnim = (AnimationDrawable) getResources().getDrawable(R.drawable.dynamic_drawable);//初始化播放资源及逻辑
DynamicIv = (ImageView)findViewById(R.id.DynamicIv1);//<span style="font-family: Arial, Helvetica, sans-serif;">DynamicIv1布局文件中一个很普通的</span><span style="font-family: Arial, Helvetica, sans-serif;">ImageView控件即可</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>DynamicIv.setBackgroundDrawable(frameAnim);
frameAnim.start();


//更多的一些用法
void start():开始播放逐帧动画。

void stop():停止播放逐帧动画。

void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。

int getDuration(int i):得到指定index的帧的持续时间。

Drawable getFrame(int index):得到指定index的帧Drawable。

int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。

boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。

boolean isRunning():当前AnimationDrawable是否正在播放。

void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放

*************************************************************************8

*********方法二(使用《AdapterFlipper》控件):

//activity_main.xml  就是定义一个很普通的AdapterViewFlipper控件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<AdapterViewFlipper
android:id="@+id/filpper"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:flipInterval="200" >                                              <!--控制播放的时间,帧图之间的播放间隔 -->
</AdapterViewFlipper>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:onClick="prev"
android:text="prev" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:onClick="next"
android:text="next" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="auto"
android:text="auto" />

</RelativeLayout>


//MainAcivity.java  快一点只看注释

package com.example.xml03;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterViewFlipper;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.StackView;

public class MainActivity extends Activity {

private int[] imageIds = { R.drawable.dynamic01, R.drawable.dynamic02,
R.drawable.dynamic03, R.drawable.dynamic05, R.drawable.dynamic06,
R.drawable.dynamic07, R.drawable.dynamic08 };

AdapterViewFlipper filpper;

StackView mStackView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
filpper = (AdapterViewFlipper)findViewById(R.id.filpper);
BaseAdapter adapter = new BaseAdapter() { //新建<span style="font-family: Arial, Helvetica, sans-serif;">BaseAdapter,里面放若干帧图片</span>

@Override
public View getView(int position, View convertView, ViewGroup parent) //这里循环把帧图片加入<span style="font-family: Arial, Helvetica, sans-serif;">BaseAdapter中,一次加一帧</span>
{
// TODO Auto-generated method stub
ImageView imageview = new ImageView(MainActivity.this);
imageview.setImageResource(imageIds[position]);
imageview.setScaleType(ImageView.ScaleType.FIT_XY);
imageview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
return imageview;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return imageIds.length;
}
};

filpper.setAdapter(adapter); //把<span style="font-family: Arial, Helvetica, sans-serif;">建好的</span><span style="font-family: Arial, Helvetica, sans-serif;">BaseAdapter加到</span><span style="font-family: Arial, Helvetica, sans-serif;">AdapterViewFlipper控件中</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>
public void prev(View view){ //点击前一帧
filpper.showPrevious();
filpper.stopFlipping();
}

public void next(View view){ //点击下一帧
filpper.showNext();
filpper.stopFlipping();
}

public void auto(View view){ //点击自动播放即“动态图”,按实现在xml文件中设定好的时间进行播放
filpper.startFlipping();
}

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