為Textview里面的ImageSpan添加點擊響應事件


對於圖文混排的TextView,用戶在瀏覽到里面的圖片的時候,往往有點擊圖片preview大圖或者preview之后保存圖片的需求,這就需要為Textview里面的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即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM