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

Android中显示gif动态图片

2014-05-16 15:19 453 查看
在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理。

本文是采用自定义view 然后进行重新onDraw方法来实现

首先自定义View【MyGifView.java】

/**
* MyGifView.java
* Copyright(C) 2014
* creator:cuiran 2014-5-16 下午2:01:56
*/
package com.cayden.videodemo.view;

import com.cayden.videodemo.R;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;

/**
* 自定义View 播放gif动画
* @author cuiran
* @version 1.0.0
*/
public class MyGifView extends View {

private long movieStart;

private Movie movie=Movie.decodeStream(getResources().openRawResource(R.drawable.football));

private MyGifView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}

private MyGifView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

public MyGifView(Context context) {
super(context);
// TODO Auto-generated constructor stub

}

/* (non-Javadoc)
* @see android.view.View#onDraw(android.graphics.Canvas)
*/
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
long curTime=android.os.SystemClock.uptimeMillis();
//第一次播放
if (movieStart == 0) {
movieStart = curTime;
}
if (movie != null) {
int duraction = movie.duration();
int relTime = (int) ((curTime-movieStart)%duraction);
movie.setTime(relTime);
movie.draw(canvas, 0, 0);
//强制重绘
invalidate();
}
super.onDraw(canvas);

}

}

然后写Activity

/**
* GifMainActivity.java
* Copyright(C) 2014
* creator:cuiran 2014-5-16 下午2:10:29
*/
package com.cayden.videodemo;

import com.cayden.videodemo.view.MyGifView;

import android.app.Activity;
import android.os.Bundle;

/**
* TODO
* @author cuiran
* @version 1.0.0
*/
public class GifMainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//第一种 直接使用代码
MyGifView gifView=new MyGifView(getApplicationContext());
setContentView(gifView);

//第二种采用xml 貌似出错了?????
//		setContentView(R.layout.gif_main);
}
}
本来还可以使用布局xml的但是报错了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<TextView
android:text="====Gif图片测试布局===="
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>

<com.cayden.videodemo.view.MyGifView
android:id="@+id/iv"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_margin="20dp"
/>
</LinearLayout>

以上是部分代码,仅供参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: