Androidでgif画像を動的に表示
4632 ワード
Androidが持っているコントロールにはgif画像が表示されません
ネット上の解決方法は大体3種類あります
第一に、gifピクチャをNフレームに分割し(アメリカ/ソフトウェアで完了)、その後、逐次再生する.
第二に、javaコードを利用して画像をNフレームに分割する.
第三:androidには、gifアニメーションを再生するために使用できるMovieクラスがあります(android.graphicsパッケージの下にあります)
前の2つの考え方は同じで、2つ目のネット上にはjarパッケージがダウンロードできます(リソースにアップロードされています).
1つ目はフレーム数の多い画像に対して煩雑すぎて、使用を提唱しない.
まず2つ目の方法を説明します.
GifAction.JAvaオブザーバークラスは、GIFがGifFrameをロードに成功したかどうかを監視する.JAvaの3人のメンバー:現在の画像、遅延、次のFrameのリンク.GifDecoder.JAva復号スレッドクラスGifView.JAvaマスタークラスは、GifView構築方法、ピクチャソースの設定、遅延、描画など、一般的な方法を含む.
次のように適用されます.
1-GifView.JArはあなたのプロジェクトに参加します.2-xmlでGifViewの基本プロパティを設定します.GifViewはViewクラスから継承され、Button、ImageViewと同様にUIコントロールです.android:layout_height="wrap_content"android:layout_width="wrap_content"android:paddingTop="4 px"android:paddingLeft="14 px"android:enabled="false"/>3-コードに共通属性を設定する//xmlからGifViewのハンドルgf 1=(GifView)findView(R.id.gif 1);//Gifピクチャソースgf 1を設定.setGifImage(R.drawable.gif1);//リスナーgf 1を追加する.setOnClickListener(this);//表示の大きさを設定、gf 1を延伸または圧縮する.setShowDimension(300, 300);//ロード方式を設定:ロード後の表示、ロードエッジの表示、第1フレームのみの表示、gf 1の表示.setGifImageType(GifImageType.COVER);
次に、3つ目の方法を分析します.
、gifピクチャを表示するには、カスタム属性を含むMovieクラスとカスタムコントロールを使用する必要があります.
まず、コントロールのプロパティを定義します.
res/valuesにxmlファイルを作成し、命の名前attrsに慣れます.xml(他の名前に名前を付けることができます)
ここでxmlに追加されたプロパティは次のとおりです.
ここではsrcファイルを設定するプロパティを1つだけ追加しました.
プロパティが設定されています.では、このsrcプロパティをjavaコードにどのように対応させるか、これは構造関数に処理する必要があります.
次はsetSrc関数です.
次はviewのonDraw関数、これも絵画アニメーションの鍵です
次はmain.xmlファイルにカスタムGifViewコントロールを追加
ここでxmlns:gif="http://schemas.android.com/apk/res/com.gif.demo「すなわちgifは自分で定義したnamespaceであり、com.gif.demoは自分のパケット名、すなわちactivityに対応するパケット名に対応する
最後にactivityでsetContentView(R.layout.main)でOK
ネット上の解決方法は大体3種類あります
第一に、gifピクチャをNフレームに分割し(アメリカ/ソフトウェアで完了)、その後、逐次再生する.
第二に、javaコードを利用して画像をNフレームに分割する.
第三:androidには、gifアニメーションを再生するために使用できるMovieクラスがあります(android.graphicsパッケージの下にあります)
前の2つの考え方は同じで、2つ目のネット上にはjarパッケージがダウンロードできます(リソースにアップロードされています).
1つ目はフレーム数の多い画像に対して煩雑すぎて、使用を提唱しない.
まず2つ目の方法を説明します.
GifAction.JAvaオブザーバークラスは、GIFがGifFrameをロードに成功したかどうかを監視する.JAvaの3人のメンバー:現在の画像、遅延、次のFrameのリンク.GifDecoder.JAva復号スレッドクラスGifView.JAvaマスタークラスは、GifView構築方法、ピクチャソースの設定、遅延、描画など、一般的な方法を含む.
public interface GifAction {
/**
* gif
* @param parseStatus , true
* @param frameIndex , , -1
*/
public void parseOk(boolean parseStatus,int frameIndex);
}
// gif
public class GifDecoder extends Thread
//gif
public class GifFrame
{
/**
*
*
* @param im
*
* @param del
*
*/
public GifFrame(Bitmap im, int del)
{
image = im;
delay = del;
}
/** */
public Bitmap image;
/** */
public int delay;
/** */
public GifFrame nextFrame = null;
}
/**
* GifView
* gif , android view( imageview) 。
* gif , OOM 。
*
* @author liao
*
*/
public class GifView extends View implements GifAction
次のように適用されます.
1-GifView.JArはあなたのプロジェクトに参加します.2-xmlでGifViewの基本プロパティを設定します.GifViewはViewクラスから継承され、Button、ImageViewと同様にUIコントロールです.android:layout_height="wrap_content"android:layout_width="wrap_content"android:paddingTop="4 px"android:paddingLeft="14 px"android:enabled="false"/>3-コードに共通属性を設定する//xmlからGifViewのハンドルgf 1=(GifView)findView(R.id.gif 1);//Gifピクチャソースgf 1を設定.setGifImage(R.drawable.gif1);//リスナーgf 1を追加する.setOnClickListener(this);//表示の大きさを設定、gf 1を延伸または圧縮する.setShowDimension(300, 300);//ロード方式を設定:ロード後の表示、ロードエッジの表示、第1フレームのみの表示、gf 1の表示.setGifImageType(GifImageType.COVER);
次に、3つ目の方法を分析します.
、gifピクチャを表示するには、カスタム属性を含むMovieクラスとカスタムコントロールを使用する必要があります.
まず、コントロールのプロパティを定義します.
res/valuesにxmlファイルを作成し、命の名前attrsに慣れます.xml(他の名前に名前を付けることができます)
ここでxmlに追加されたプロパティは次のとおりです.
ここではsrcファイルを設定するプロパティを1つだけ追加しました.
プロパティが設定されています.では、このsrcプロパティをjavaコードにどのように対応させるか、これは構造関数に処理する必要があります.
public GifView(Context context, AttributeSet attrs){
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs,
R.styleable.GifView); // attrs.xml GifView
int taCount = ta.length(); //
for (int i=0;i
次はsetSrc関数です.
public void setSrc(int id){
gifMovie = Movie.decodeStream(getResources().openRawResource(id)); //gifMovie Movie
}
次はviewのonDraw関数、これも絵画アニメーションの鍵です
public void onDraw(Canvas canvas){
long now = android.os.SystemClock.uptimeMillis(); //
if (lStartTime == 0) { // first time
lStartTime = now;
}
if (gifMovie != null) {
int dur = gifMovie.duration(); // gif
if (dur == 0) {
dur = 1000;
}
int relTime = (int)((now - lStartTime) % dur);
gifMovie.setTime(relTime); //
gifMovie.draw(canvas, getWidth() - gifMovie.width(), // ( )
getHeight() - gifMovie.height());
invalidate();
}
}
次はmain.xmlファイルにカスタムGifViewコントロールを追加
ここでxmlns:gif="http://schemas.android.com/apk/res/com.gif.demo「すなわちgifは自分で定義したnamespaceであり、com.gif.demoは自分のパケット名、すなわちactivityに対応するパケット名に対応する
最後にactivityでsetContentView(R.layout.main)でOK