为Textview里面的ImageSpan添加点击响应事件
2017-01-13 19:08
2581 查看
对于图文混排的TextView,用户在浏览到里面的图片的时候,往往有点击图片preview大图或者preview之后保存图片的需求,这就需要为Textview里面的ImageSpan设置点击响应事件。
由于ImageSpan本身无法实现点击响应,我们首先想到的是为Textview设置textview.setMovementMethod(LinkMovementMethod.getInstance());
然后再写一个类继承自LinkMovementMethod并重写onTouchEvent方法,在这个方法里面处理图片的点击事件,但是在实际操作过程中发现,这样设置之后Textview的ImageSpan仍然
无法获取到点击事件。
经过一番摸索之后,发现对Textview直接设置OnTouchListener,在OnTouchListener里面添加ImageSpan的onClick处理即可实现图片的点击响应处理,代码如下:
最关键的部分是第24行和27行,24行里面的FileImageSpan就是你需要设置点击响应事件的ImageSpan,可以在这个类里面加入
由于ImageSpan本身无法实现点击响应,我们首先想到的是为Textview设置textview.setMovementMethod(LinkMovementMethod.getInstance());
然后再写一个类继承自LinkMovementMethod并重写onTouchEvent方法,在这个方法里面处理图片的点击事件,但是在实际操作过程中发现,这样设置之后Textview的ImageSpan仍然
无法获取到点击事件。
经过一番摸索之后,发现对Textview直接设置OnTouchListener,在OnTouchListener里面添加ImageSpan的onClick处理即可实现图片的点击响应处理,代码如下:
mTextView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { CharSequence text = ((TextView)v).getText(); Spannable sText = Spannable.Factory.getInstance().newSpannable(text); TextView widget = (TextView) v; int action = event.getAction(); if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { int x = (int) event.getX(); int y = (int) event.getY(); x -= widget.getTotalPaddingLeft(); y -= widget.getTotalPaddingTop(); x += widget.getScrollX(); y += widget.getScrollY(); Layout layout = widget.getLayout(); int line = layout.getLineForVertical(y); int off = layout.getOffsetForHorizontal(line, x); FileImageSpan[] imageSpans = sText.getSpans(off, off, FileImageSpan.class); if (imageSpans.length != 0) { if (action == MotionEvent.ACTION_UP) { imageSpans[0].onClick(widget); } return true; } } return false; } });
最关键的部分是第24行和27行,24行里面的FileImageSpan就是你需要设置点击响应事件的ImageSpan,可以在这个类里面加入
public void onClick(View view) { } 里面的实现就是你点击这个图片之后希望做的处理,根据需求添加。 然后在第27行拿到这个ImageSpan的实例回调到onClick即可。
相关文章推荐
- ListView的Item里的TextView设置ClickableSpan和LinkMovementMethod导致ListView无法响应点击事件
- UIImageView上添加Button不能响应点击事件
- 自定义可点击的ImageSpan并在TextView中内置“View“
- 自定义可点击的ImageSpan并在TextView中内置“View“
- Android学习—— TextView ClickableSpan 点击链接事件 改超链接颜色
- TextView点击事件不响应解决办法
- TextView和EditText中添加图片(ImageSpan)
- 自定义可点击的ImageSpan并在TextView中内置“View“
- 关于在tableview的footerView上添加button的点击不响应事件
- view上添加点手势 button无法响应点击事件
- view上添加点手势 button无法响应点击事件
- android给 TextView 加上效果和事件响应 判断是否点击函数
- UIImageView上添加Button不能响应点击事件[转]
- 自定义可点击的ImageSpan并在TextView中内置“View“
- view上添加点手势 button无法响应点击事件
- 安卓开发 给textview添加点击事件并设置点击颜色
- 设置TextView下划线并响应点击事件(SpannableString)
- ipad 添加到imageView中的按钮没有点击事件
- 设置TextView下划线并响应点击事件(SpannableString)
- Android开发给TextView添加点击事件