Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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());
Expand All @@ -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);
Expand All @@ -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);
}
Expand All @@ -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();
}
}

Expand All @@ -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) {
Expand All @@ -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();
}
}
27 changes: 26 additions & 1 deletion example/src/main/res/layout/main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,32 @@

<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:text="@string/SpannedEllipsizer_text" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
android:orientation="horizontal">

<Button
android:id="@+id/btnInput"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/input" />

<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/clear" />
</LinearLayout>
</LinearLayout>
3 changes: 3 additions & 0 deletions example/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,7 @@
<string name="stop">stop</string>
<string name="next_frame">next frame</string>
<string name="prev_frame">prev frame</string>
<string name="input">input</string>
<string name="clear">clear</string>
<string name="SpannedEllipsizer_text">SpannedEllipsizer text</string>
</resources>
2 changes: 1 addition & 1 deletion library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ afterEvaluate {
artifact tasks.androidSourcesJar
groupId = 'jp.tomorrowkey.android.gifplayer'
artifactId = 'gifplayer'
version = '1.3.0'
version = '1.3.1-SNAPSHOT'
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down