diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..a4f1e40 --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..02e7214 --- /dev/null +++ b/.project @@ -0,0 +1,33 @@ + + + GifView + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..281f57f --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/bin/AndroidManifest.xml b/bin/AndroidManifest.xml new file mode 100644 index 0000000..281f57f --- /dev/null +++ b/bin/AndroidManifest.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/bin/R.txt b/bin/R.txt new file mode 100644 index 0000000..9aa5e6e --- /dev/null +++ b/bin/R.txt @@ -0,0 +1,7 @@ +int attr drawable 0x7f010000 +int drawable ic_launcher 0x7f020000 +int string app_name 0x7f030000 +int style AppBaseTheme 0x7f040000 +int style AppTheme 0x7f040001 +int[] styleable GifView { 0x7f010000 } +int styleable GifView_drawable 0 diff --git a/bin/classes/com/roisoleil/gifview/BuildConfig.class b/bin/classes/com/roisoleil/gifview/BuildConfig.class new file mode 100644 index 0000000..a89994b Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/BuildConfig.class differ diff --git a/bin/classes/com/roisoleil/gifview/GifView.class b/bin/classes/com/roisoleil/gifview/GifView.class new file mode 100644 index 0000000..66b928c Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/GifView.class differ diff --git a/bin/classes/com/roisoleil/gifview/R$attr.class b/bin/classes/com/roisoleil/gifview/R$attr.class new file mode 100644 index 0000000..3afc10a Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/R$attr.class differ diff --git a/bin/classes/com/roisoleil/gifview/R$drawable.class b/bin/classes/com/roisoleil/gifview/R$drawable.class new file mode 100644 index 0000000..cb0b1d3 Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/R$drawable.class differ diff --git a/bin/classes/com/roisoleil/gifview/R$string.class b/bin/classes/com/roisoleil/gifview/R$string.class new file mode 100644 index 0000000..07112f4 Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/R$string.class differ diff --git a/bin/classes/com/roisoleil/gifview/R$style.class b/bin/classes/com/roisoleil/gifview/R$style.class new file mode 100644 index 0000000..d1a13d0 Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/R$style.class differ diff --git a/bin/classes/com/roisoleil/gifview/R$styleable.class b/bin/classes/com/roisoleil/gifview/R$styleable.class new file mode 100644 index 0000000..487e92d Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/R$styleable.class differ diff --git a/bin/classes/com/roisoleil/gifview/R.class b/bin/classes/com/roisoleil/gifview/R.class new file mode 100644 index 0000000..087a42c Binary files /dev/null and b/bin/classes/com/roisoleil/gifview/R.class differ diff --git a/bin/gifview.jar b/bin/gifview.jar new file mode 100644 index 0000000..32b971a Binary files /dev/null and b/bin/gifview.jar differ diff --git a/bin/jarlist.cache b/bin/jarlist.cache new file mode 100644 index 0000000..1b5ec3f --- /dev/null +++ b/bin/jarlist.cache @@ -0,0 +1,3 @@ +# cache for current jar dependecy. DO NOT EDIT. +# format is +# Encoding is UTF-8 diff --git a/bin/res/drawable-hdpi/ic_launcher.png b/bin/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000..bcfa058 Binary files /dev/null and b/bin/res/drawable-hdpi/ic_launcher.png differ diff --git a/bin/res/drawable-mdpi/ic_launcher.png b/bin/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000..85848ff Binary files /dev/null and b/bin/res/drawable-mdpi/ic_launcher.png differ diff --git a/bin/res/drawable-xhdpi/ic_launcher.png b/bin/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000..916901e Binary files /dev/null and b/bin/res/drawable-xhdpi/ic_launcher.png differ diff --git a/gen/com/roisoleil/gifview/BuildConfig.java b/gen/com/roisoleil/gifview/BuildConfig.java new file mode 100644 index 0000000..9610276 --- /dev/null +++ b/gen/com/roisoleil/gifview/BuildConfig.java @@ -0,0 +1,6 @@ +/** Automatically generated file. DO NOT MODIFY */ +package com.roisoleil.gifview; + +public final class BuildConfig { + public final static boolean DEBUG = true; +} \ No newline at end of file diff --git a/gen/com/roisoleil/gifview/R.java b/gen/com/roisoleil/gifview/R.java new file mode 100644 index 0000000..cec93e4 --- /dev/null +++ b/gen/com/roisoleil/gifview/R.java @@ -0,0 +1,76 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package com.roisoleil.gifview; + +public final class R { + public static final class attr { + /**

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + */ + public static int drawable=0x7f010000; + } + public static final class drawable { + public static int ic_launcher=0x7f020000; + } + public static final class string { + public static int app_name=0x7f030000; + } + public static final class style { + /** + Base application theme, dependent on API level. This theme is replaced + by AppBaseTheme from res/values-vXX/styles.xml on newer devices. + + + Theme customizations available in newer API levels can go in + res/values-vXX/styles.xml, while customizations related to + backward-compatibility can go here. + + + Base application theme for API 11+. This theme completely replaces + AppBaseTheme from res/values/styles.xml on API 11+ devices. + + API 11 theme customizations can go here. + + Base application theme for API 14+. This theme completely replaces + AppBaseTheme from BOTH res/values/styles.xml and + res/values-v11/styles.xml on API 14+ devices. + + API 14 theme customizations can go here. + */ + public static int AppBaseTheme=0x7f040000; + /** Application theme. + All customizations that are NOT specific to a particular API-level can go here. + */ + public static int AppTheme=0x7f040001; + } + public static final class styleable { + /** Attributes that can be used with a GifView. +

Includes the following attributes:

+ + + + + +
AttributeDescription
{@link #GifView_drawable com.roisoleil.gifview:drawable}
+ @see #GifView_drawable + */ + public static final int[] GifView = { + 0x7f010000 + }; + /** +

This symbol is the offset where the {@link com.roisoleil.gifview.R.attr#drawable} + attribute's value can be found in the {@link #GifView} array. + + +

Must be a reference to another resource, in the form "@[+][package:]type:name" +or to a theme attribute in the form "?[package:][type:]name". + @attr name android:drawable + */ + public static final int GifView_drawable = 0; + }; +} diff --git a/libs/android-support-v4.jar b/libs/android-support-v4.jar new file mode 100644 index 0000000..6080877 Binary files /dev/null and b/libs/android-support-v4.jar differ diff --git a/proguard-project.txt b/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..484dab0 --- /dev/null +++ b/project.properties @@ -0,0 +1,15 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-17 +android.library=true diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000..96a442e Binary files /dev/null and b/res/drawable-hdpi/ic_launcher.png differ diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000..359047d Binary files /dev/null and b/res/drawable-mdpi/ic_launcher.png differ diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000..71c6d76 Binary files /dev/null and b/res/drawable-xhdpi/ic_launcher.png differ diff --git a/res/values-v11/styles.xml b/res/values-v11/styles.xml new file mode 100644 index 0000000..9643ba1 --- /dev/null +++ b/res/values-v11/styles.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/res/values-v14/styles.xml b/res/values-v14/styles.xml new file mode 100644 index 0000000..50251a1 --- /dev/null +++ b/res/values-v14/styles.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/res/values/attrs.xml b/res/values/attrs.xml new file mode 100644 index 0000000..992f9bf --- /dev/null +++ b/res/values/attrs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..9c367f4 --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,5 @@ + + + GifView + + \ No newline at end of file diff --git a/res/values/styles.xml b/res/values/styles.xml new file mode 100644 index 0000000..79a39af --- /dev/null +++ b/res/values/styles.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/com/roisoleil/gifview/GifView.java b/src/com/roisoleil/gifview/GifView.java new file mode 100644 index 0000000..a3e2e3e --- /dev/null +++ b/src/com/roisoleil/gifview/GifView.java @@ -0,0 +1,102 @@ +package com.roisoleil.gifview; + +import java.io.InputStream; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Movie; +import android.net.Uri; +import android.os.SystemClock; +import android.util.AttributeSet; +import android.view.View; + +public class GifView extends View { + + private Movie movie; + + private long startTime; + + private int drawableId; + + public GifView(Context context) { + super(context); + } + + public GifView(Context context, AttributeSet attrs) { + super(context, attrs); + setAttrs(attrs); + initializeView(); + } + + public GifView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setAttrs(attrs); + initializeView(); + } + + public void setInputStram(InputStream inputStream) { + initializeView(inputStream); + } + + public void setDrawable(int drawableId) { + this.drawableId = drawableId; + initializeView(); + } + + public int getDrawable() { + return drawableId; + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + canvas.drawColor(Color.TRANSPARENT); + final long actualTime = SystemClock.uptimeMillis(); + if (startTime == 0) { + startTime = actualTime; + } + if (movie != null) { + final int relativeTime = (int) ((actualTime - startTime) % movie + .duration()); + movie.setTime(relativeTime); + double scaleFactorX = (double) getWidth() / (double) movie.width(); + canvas.scale((float) scaleFactorX, (float) scaleFactorX); + movie.draw(canvas, (float) scaleFactorX, (float) scaleFactorX); + } + invalidate(); + } + + private void initializeView() { + if (drawableId != 0) { + InputStream inputStream = getContext().getResources() + .openRawResource(drawableId); + initializeView(inputStream); + } + } + + private void initializeView(InputStream inputStream) { + if (inputStream != null) { + movie = Movie.decodeStream(inputStream); + startTime = 0; + invalidate(); + } + } + + private void setAttrs(AttributeSet attrs) { + if (attrs != null) { + TypedArray a = getContext().obtainStyledAttributes(attrs, + R.styleable.GifView, 0, 0); + String gifSource = a.getString(R.styleable.GifView_drawable); + if (gifSource != null) { + String sourceName = Uri.parse(gifSource).getLastPathSegment() + .replace(".gif", ""); + setDrawable(getResources().getIdentifier(sourceName, + "drawable", getContext().getPackageName())); + } + a.recycle(); + } + } + +}