+# 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:
+
+
+
+ Attribute | Description |
+ {@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();
+ }
+ }
+
+}