WebView实现长按保存图片 长按识别二维码,看完吊打面试官
然后再來看一下效果圖:
保存圖片
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xJCmIdzN-1630942827376)(https://user-gold-cdn.xitu.io/2018/1/11/160e418e435c50e9?imageslim)]
識別包含普通文字的二維碼:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0XNmeBCs-1630942827378)(https://user-gold-cdn.xitu.io/2018/1/11/160e4812ed2b565a?imageslim)]
識別包含網(wǎng)址的二維碼:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LQNB2XT9-1630942827379)(https://user-gold-cdn.xitu.io/2018/1/11/160e485ab8c9c071?imageslim)]
上述功能所用到的類和庫:
- 獲得長按內(nèi)容:WebView.HitTestResult
- 彈框列表:DialogFragment
- 圖片下載:Glide
- 二維碼識別:Zxing
實現(xiàn)要點
記錄長按位置
繼承WebView記錄觸摸位置:
@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {touchX = (int) event.getRawX();touchY = (int) event.getRawY();return super.onInterceptTouchEvent(event);}彈框我選擇DialogFragment而不是poupwindow的原因是poupwindow的顯示通常需要依托另一個View,而且在7.0以上有兼容問題。 判斷長按位置的內(nèi)容類型是否是圖片:
獲取圖片信息
setOnLongClickListener(new View.OnLongClickListener() {public boolean onLongClick(View v) {WebView.HitTestResult result = getHitTestResult();if (null == result)return false;int type = result.getType();switch (type) {case WebView.HitTestResult.EDIT_TEXT_TYPE: // 選中的文字類型break;case WebView.HitTestResult.PHONE_TYPE: // 處理撥號break;case WebView.HitTestResult.EMAIL_TYPE: // 處理Emailbreak;case WebView.HitTestResult.GEO_TYPE: //  地圖類型break;case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超鏈接break;case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE: // 帶有鏈接的圖片類型case WebView.HitTestResult.IMAGE_TYPE: // 處理長按圖片的菜單項String url = result.getExtra();if (mOnSelectItemListener != null && url != null && URLUtil.isValidUrl(url)) {mOnSelectItemListener.onSelected(touchX, touchY, result.getType(), url);}return true;case WebView.HitTestResult.UNKNOWN_TYPE: //未知break;}return false;}});在手指長按位置處彈出彈框
HitTestResult是一個實體類,只記錄兩個信息:當選選擇內(nèi)容的類型和內(nèi)容的具體值。可以看到通過WebView.HitTestResult,我們可以獲得除了圖片外的很多內(nèi)容類型。當然這里我們只需要判斷是否是圖片就好了,然后將長按位置和url一起回調(diào)給外層。在手指長按處顯示彈框,主要就是DialogFragment顯示位置的設定了:
public void onStart() {super.onStart();Dialog dialog = getDialog();if (dialog != null) {Window window = dialog.getWindow();if (window != null) {WindowManager.LayoutParams lp = window.getAttributes();window.setGravity(Gravity.LEFT | Gravity.TOP);lp.x = LocationX;//橫坐標位置lp.y = LocationY;//縱坐標位置 ## 推薦學習資料* Android進階學習全套手冊* Android對標阿里P7學習視頻* BAT TMD大廠Android高頻面試題...(img-uqyPFRO0-1630942827383)]* BAT TMD大廠Android高頻面試題[外鏈圖片轉(zhuǎn)存中...(img-4XTZTH96-1630942827384)]**[CodeChina開源項目:《Android學習筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項目實戰(zhàn)源碼》](https://codechina.csdn.net/m0_60958482/android_p7)**總結(jié)
以上是生活随笔為你收集整理的WebView实现长按保存图片 长按识别二维码,看完吊打面试官的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卓佳集团收购亚洲市场领导企业麦迪森太平洋
- 下一篇: selenium抓取页面表格