真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

AndroidWebView實現(xiàn)長按保存圖片及長按識別二維碼功能

先來簡單說一下本文所要實現(xiàn)的功能:用戶在瀏覽網(wǎng)頁的時候,長按某一區(qū)域,識別如果是圖片,則彈出彈框,出現(xiàn)保存圖片的功能。同時識別圖片是否是二維碼,如果是則在彈框中追加識別二維碼功能。

在成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設過程中,需要針對客戶的行業(yè)特點、產(chǎn)品特性、目標受眾和市場情況進行定位分析,以確定網(wǎng)站的風格、色彩、版式、交互等方面的設計方向。成都創(chuàng)新互聯(lián)還需要根據(jù)客戶的需求進行功能模塊的開發(fā)和設計,包括內(nèi)容管理、前臺展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計和安全保護等功能。

細節(jié)上:保存圖片的彈框要顯示在手指長按的位置;選擇圖片保存后,可以讓用戶直接去相冊查看;選擇識別二維碼,判斷是是不是網(wǎng)址,是的話可以讓用戶選擇復制或訪問,否則可以讓用戶選擇復制或搜索。

然后再來看一下效果圖:

保存圖片

Android WebView實現(xiàn)長按保存圖片及長按識別二維碼功能

save.gif

識別包含普通文字的二維碼:

Android WebView實現(xiàn)長按保存圖片及長按識別二維碼功能

text.gif

識別包含網(wǎng)址的二維碼:

Android WebView實現(xiàn)長按保存圖片及長按識別二維碼功能

code.gif

上述功能所用到的類和庫:

  • 獲得長按內(nèi)容: WebView.HitTestResult
  • 彈框列表: DialogFragment
  • 圖片下載: Glide
  • 二維碼識別: Zxing

實現(xiàn)要點

記錄長按位置

繼承 WebView 記錄觸摸位置:

@Override
 public 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: // 處理Email
      break;
     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;//縱坐標位置
    lp.width = UIHelper.dip2px(100);
    lp.dimAmount = 0.0f;//外層背景透明,默認變暗
    lp.width = ViewGroup.LayoutParams.WRAP_CONTENT;
    lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
    window.setAttributes(lp);
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//內(nèi)部背景透明
   }
  }
 }

保存到相冊

利用 Glide 下載圖片, Glide 自帶預加載和圖片緩存功能,不需要每次都從網(wǎng)絡中下載:

GlideApp.with(appContext).asFile().load(url).submit().get();

可以在長按識別出圖片的時候就行預加載:

GlideApp.with(appContext).asBitmap().load(url).preload();

將圖片保存在相冊:

public static void displayToGallery(Context context, File photoFile) {
  if (photoFile == null || !photoFile.exists()) {
   return;
  }
  String photoPath = photoFile.getAbsolutePath();
  String photoName = photoFile.getName();
  // 把文件插入到系統(tǒng)圖庫
  try {
   ContentResolver contentResolver = context.getContentResolver();
   MediaStore.Images.Media.insertImage(contentResolver, photoPath, photoName, null);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
  // 最后通知圖庫更新
  context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + photoPath)));
 }

識別圖片中的二維碼

顯示彈框的同時還要判斷圖片是否包含二維碼,這部分就是 Zxing 自帶的功能,所以代碼就不貼了。注意不應該等是 Zxing 判斷是不是二維碼后再顯示彈框,因為這部分操作耗時可能比較長(見圖二)。應當在識別二維碼內(nèi)容后再去更新彈框列表的內(nèi)容。

總結(jié)

總體來說這個功能實現(xiàn)注意的地方還是挺多的,好在都不復雜。當然本例還存在待優(yōu)化的地方,以及實現(xiàn)更高級的功能,比如以圖搜圖,查看大圖功能,也可以利用 WebView.HitTestResult 對獲取到其他類型的內(nèi)容進行處理,限于篇幅就不再展開了。

最后貼下本項目github地址,對 WebView 感興趣的可以了解下:

github

總結(jié)

以上所述是小編給大家介紹的Android WebView實現(xiàn)長按保存圖片及長按識別二維碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!


分享文章:AndroidWebView實現(xiàn)長按保存圖片及長按識別二維碼功能
文章出自:http://weahome.cn/article/geecod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部