diff --git a/example/src/main/java/jp/tomorrowkey/android/gifplayer/example/MainActivity.java b/example/src/main/java/jp/tomorrowkey/android/gifplayer/example/MainActivity.java
index 2caa3fe..3718e59 100644
--- a/example/src/main/java/jp/tomorrowkey/android/gifplayer/example/MainActivity.java
+++ b/example/src/main/java/jp/tomorrowkey/android/gifplayer/example/MainActivity.java
@@ -6,11 +6,13 @@
import android.os.HandlerThread;
import android.text.Editable;
import android.text.Spannable;
+import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.TextView;
import jp.tomorrowkey.android.gifplayer.GifSpan;
import jp.tomorrowkey.android.gifplayer.GifView;
@@ -22,6 +24,7 @@ public class MainActivity extends Activity implements OnClickListener, TextWatch
private GifView gifView;
private EditText editText;
+ private TextView textView;
static {
Timber.plant(new Timber.DebugTree());
@@ -41,6 +44,9 @@ public void onCreate(Bundle savedInstanceState) {
final Button btnStop = findViewById(R.id.btnStop);
final Button btnPrevFrame = findViewById(R.id.btnPrevFrame);
final Button btnNextFrame = findViewById(R.id.btnNextFrame);
+ final Button btnInput = findViewById(R.id.btnInput);
+ final Button btnClear = findViewById(R.id.btnClear);
+ textView = findViewById(R.id.textView);
editText = findViewById(R.id.editText);
gifView.setGif(R.drawable.break_droid);
@@ -49,6 +55,8 @@ public void onCreate(Bundle savedInstanceState) {
btnStop.setOnClickListener(this);
btnPrevFrame.setOnClickListener(this);
btnNextFrame.setOnClickListener(this);
+ btnInput.setOnClickListener(this);
+ btnClear.setOnClickListener(this);
editText.addTextChangedListener(this);
}
@@ -66,6 +74,10 @@ public void onClick(View v) {
gifView.prevFrame();
} else if (id == R.id.btnNextFrame) {
gifView.nextFrame();
+ } else if (id == R.id.btnInput) {
+ inputText();
+ } else if (id == R.id.btnClear) {
+ clearText();
}
}
@@ -87,6 +99,10 @@ public void onTextChanged(final CharSequence s, final int start, final int befor
}
}
+ @Override
+ public void afterTextChanged(Editable editable) {
+ }
+
private boolean hasGifSpan(final Spannable s, final int position) {
final GifSpan[] gifSpans = s.getSpans(position, position + 1, GifSpan.class);
if (gifSpans != null) {
@@ -104,8 +120,22 @@ private boolean hasGifSpan(final Spannable s, final int position) {
return false;
}
- @Override
- public void afterTextChanged(Editable s) {
+ private void inputText() {
+ CharSequence s = editText.getText();
+ final Spannable spannable = new SpannableStringBuilder(s.toString());
+ final int count = spannable.length();
+
+ for (int i = 0; i < count; i++) {
+ if (hasGifSpan(spannable, i)) continue;
+ final GifSpan span = new GifSpan(textView, R.drawable.break_droid, 1.4f);
+ span.start();
+ spannable.setSpan(span, i, i + 1,
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+ textView.setText(spannable, TextView.BufferType.SPANNABLE);
+ }
+ private void clearText() {
+ editText.getText().clear();
}
}
\ No newline at end of file
diff --git a/example/src/main/res/layout/main.xml b/example/src/main/res/layout/main.xml
index 3acdb81..e61e555 100644
--- a/example/src/main/res/layout/main.xml
+++ b/example/src/main/res/layout/main.xml
@@ -46,7 +46,32 @@
+
+
+
+
+ android:orientation="horizontal">
+
+
+
+
+
diff --git a/example/src/main/res/values/strings.xml b/example/src/main/res/values/strings.xml
index a46d3e4..e4a7bdf 100644
--- a/example/src/main/res/values/strings.xml
+++ b/example/src/main/res/values/strings.xml
@@ -6,4 +6,7 @@
stop
next frame
prev frame
+ input
+ clear
+ SpannedEllipsizer text
diff --git a/library/build.gradle b/library/build.gradle
index 5e3998a..8e692ba 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -39,7 +39,7 @@ afterEvaluate {
artifact tasks.androidSourcesJar
groupId = 'jp.tomorrowkey.android.gifplayer'
artifactId = 'gifplayer'
- version = '1.3.0'
+ version = '1.3.1-SNAPSHOT'
}
}
}
diff --git a/library/src/main/java/jp/tomorrowkey/android/gifplayer/GifSpan.java b/library/src/main/java/jp/tomorrowkey/android/gifplayer/GifSpan.java
index 01ee5f7..3584ec4 100644
--- a/library/src/main/java/jp/tomorrowkey/android/gifplayer/GifSpan.java
+++ b/library/src/main/java/jp/tomorrowkey/android/gifplayer/GifSpan.java
@@ -8,6 +8,7 @@
import android.graphics.Paint.FontMetricsInt;
import android.os.AsyncTask;
import android.text.Editable;
+import android.text.Spanned;
import android.text.style.ReplacementSpan;
import android.util.TypedValue;
import android.view.View;
@@ -72,10 +73,11 @@ public int getSize(Paint paint, CharSequence text, int start, int end,
if (view == null) {
return 0;
}
- if (text != view.getText()) {
- // Don't use equals because SpannableStringBuilder#equals was broken
- // https://android.googlesource.com/platform/frameworks/base/+/6b4380ea5f71f031d1105d8986c813fefe056794
- return 0;
+ if (text instanceof Spanned) {
+ Spanned spanned = (Spanned) text;
+ if (spanned.getSpanStart(this) == -1) {
+ return 0;
+ }
}
if (scaleToTextSize > 0) {
@@ -103,10 +105,11 @@ public void draw(Canvas canvas, CharSequence text, int start, int end,
if (view == null) {
return;
}
- if (text != view.getText()) {
- // Don't use equals because SpannableStringBuilder#equals was broken
- // https://android.googlesource.com/platform/frameworks/base/+/6b4380ea5f71f031d1105d8986c813fefe056794
- return;
+ if (text instanceof Spanned) {
+ Spanned spanned = (Spanned) text;
+ if (spanned.getSpanStart(this) == -1) {
+ return;
+ }
}
if (decodeStatus == DECODE_STATUS_UNDECODE) {