Skip to content

Commit d01427b

Browse files
committed
Fixed issue #49
#49 请问能否实现在图片上某处加个删除按钮点击删除图片的功能 #49
1 parent 45340e0 commit d01427b

File tree

2 files changed

+33
-14
lines changed

2 files changed

+33
-14
lines changed

ARE/are/src/main/java/com/chinalwb/are/AREditText.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.os.Build;
66
import android.support.v7.widget.AppCompatEditText;
77
import android.text.Editable;
8+
import android.text.Layout;
89
import android.text.Spanned;
910
import android.text.TextWatcher;
1011
import android.text.style.BackgroundColorSpan;
@@ -14,13 +15,16 @@
1415
import android.text.style.StyleSpan;
1516
import android.util.AttributeSet;
1617
import android.util.TypedValue;
18+
import android.view.MotionEvent;
1719
import android.view.View;
1820
import android.view.inputmethod.EditorInfo;
1921

2022
import com.chinalwb.are.android.inner.Html;
2123
import com.chinalwb.are.events.AREMovementMethod;
2224
import com.chinalwb.are.render.AreImageGetter;
2325
import com.chinalwb.are.render.AreTagHandler;
26+
import com.chinalwb.are.spans.ARE_Clickable_Span;
27+
import com.chinalwb.are.spans.AreImageSpan;
2428
import com.chinalwb.are.spans.AreSubscriptSpan;
2529
import com.chinalwb.are.spans.AreSuperscriptSpan;
2630
import com.chinalwb.are.spans.AreUnderlineSpan;
@@ -84,7 +88,7 @@ private void initGlobalValues() {
8488
}
8589

8690
private void init() {
87-
// this.setMovementMethod(new AREMovementMethod());
91+
// this.setMovementMethod(new AREMovementMethod());
8892
this.setFocusableInTouchMode(true);
8993
this.setBackgroundColor(Color.WHITE);
9094
this.setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE
@@ -95,6 +99,17 @@ private void init() {
9599
this.setTextSize(TypedValue.COMPLEX_UNIT_SP, Constants.DEFAULT_FONT_SIZE);
96100
}
97101

102+
@Override
103+
public boolean onTouchEvent(MotionEvent event) {
104+
int off = AREMovementMethod.getTextOffset(this, this.getEditableText(), event);
105+
ARE_Clickable_Span[] clickableSpans = this.getText().getSpans(off, off, ARE_Clickable_Span.class);
106+
if (clickableSpans.length == 1 && clickableSpans[0] instanceof AreImageSpan) {
107+
return true;
108+
}
109+
110+
return super.onTouchEvent(event);
111+
}
112+
98113
/**
99114
* Sets up listeners for controls.
100115
*/

ARE/are/src/main/java/com/chinalwb/are/events/AREMovementMethod.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ public AREMovementMethod(AreClickStrategy areClickStrategy) {
5858
this.mAreClickStrategy = areClickStrategy;
5959
}
6060

61+
public static int getTextOffset(TextView widget, Spannable buffer, MotionEvent event) {
62+
int x = (int) event.getX();
63+
int y = (int) event.getY();
64+
65+
x -= widget.getTotalPaddingLeft();
66+
y -= widget.getTotalPaddingTop();
67+
68+
x += widget.getScrollX();
69+
y += widget.getScrollY();
70+
71+
Layout layout = widget.getLayout();
72+
int line = layout.getLineForVertical(y);
73+
int off = layout.getOffsetForHorizontal(line, x);
74+
return off;
75+
}
76+
6177
@Override
6278
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
6379
// Supports android.text.method.LinkMovementMethod.onTouchEvent(TextView, Spannable, MotionEvent)'s
@@ -69,19 +85,7 @@ public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event
6985
int action = event.getAction();
7086

7187
if (action == MotionEvent.ACTION_UP) {
72-
int x = (int) event.getX();
73-
int y = (int) event.getY();
74-
75-
x -= widget.getTotalPaddingLeft();
76-
y -= widget.getTotalPaddingTop();
77-
78-
x += widget.getScrollX();
79-
y += widget.getScrollY();
80-
81-
Layout layout = widget.getLayout();
82-
int line = layout.getLineForVertical(y);
83-
int off = layout.getOffsetForHorizontal(line, x);
84-
88+
int off = getTextOffset(widget, buffer, event);
8589
ARE_Clickable_Span[] clickableSpans = buffer.getSpans(off, off, ARE_Clickable_Span.class);
8690
Context context = widget.getContext();
8791
boolean handled = false;

0 commit comments

Comments
 (0)