Android 使用Picasso載入網路圖片等比例縮放

来源:https://www.cnblogs.com/jiangzhishan/archive/2018/08/03/9415066.html
-Advertisement-
Play Games

在做android圖片載入的時候,由於手機屏幕受限,很多大圖載入過來的時候,我們要求等比例縮放,比如按照固定的寬度,等比例縮放高度,使得圖片的尺寸比例得到相應的縮放,但圖片沒有變形。顯然按照android:scaleType不能實現,因為會有很多限制,所以必須要自己寫演算法。 通過Picasso來縮放 ...


在做android圖片載入的時候,由於手機屏幕受限,很多大圖載入過來的時候,我們要求等比例縮放,比如按照固定的寬度,等比例縮放高度,使得圖片的尺寸比例得到相應的縮放,但圖片沒有變形。顯然按照android:scaleType不能實現,因為會有很多限制,所以必須要自己寫演算法。 

通過Picasso來縮放 
其實picasso提供了這樣的方法。具體是顯示Transformation 的 transform 方法。 
(1) 先獲取網路或本地圖片的寬高 
(2) 獲取需要的目標寬 
(3) 按比例得到目標的高度 
(4) 按照目標的寬高創建新圖

  Transformation transformation = new Transformation() {

        @Override
        public Bitmap transform(Bitmap source) {

          int targetWidth = mImg.getWidth();
          LogCat.i("source.getHeight()="+source.getHeight());
        LogCat.i("source.getWidth()="+source.getWidth());
       LogCat.i("targetWidth="+targetWidth);

          if(source.getWidth()==0){
              return source;
          }

          //如果圖片小於設置的寬度,則返回原圖
          if(source.getWidth()<targetWidth){
              return source;
          }else{
              //如果圖片大小大於等於設置的寬度,則按照設置的寬度比例來縮放
              double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
              int targetHeight = (int) (targetWidth * aspectRatio);
              if (targetHeight != 0 && targetWidth != 0) {
                  Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
                  if (result != source) {
                      // Same bitmap is returned if sizes are the same
                      source.recycle();
                  }
                  return result;
              } else {
                  return source;
              }
          }
      }

        @Override
        public String key() {
            return "transformation" + " desiredWidth";
        }
    };

之後在Picasso設置transform

  Picasso.with(mContext)
         .load(imageUrl)
         .placeholder(R.mipmap.zhanwei)
         .error(R.mipmap.zhanwei)
         .transform(transformation)
         .into(viewHolder.mImageView);

Transformation 這是Picasso的一個非常強大的功能了,它允許你在load圖片 -> into ImageView 中間這個過成對圖片做一系列的變換。比如你要做圖片高斯模糊、添加圓角、做度灰處理、圓形圖片等等都可以通過Transformation來完成。
參考文章: https://stackoverflow.com/questions/21889735/resize-image-to-full-width-and-variable-height-with-picasso


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 剛處理完“挖礦”事件,在做最後一個MySQL NBU備份的時候,發現從庫有問題,好奇的是怎麼主從狀態異常沒有告警呢?先不管這麼多了,處理了這個問題再完善告警內容。 一、錯誤信息 從庫show slave status \G看到的錯誤信息如下: 二、錯誤原因 這裡看到從庫的io_thread已經終止, ...
  • 思路: 先將取出的值隨機排序,然後在隨機排序的每次取第一條的結果 舉例如下: select * from(select t.code fromTBIZOPS_PROVINCE t ORDER BY DBMS_RANDOM.RANDOM())where rownum < 2;select * from ...
  • 吃雞游戲火了之後,身邊朋友們都在說“大吉大利,今晚吃雞”、“今天你吃雞了嗎?”作為游戲愛好者的達妹本也想加入吃雞大隊,但無奈不瞭解游戲,還手殘! 當然達妹並不認輸,在網上積極搜索攻略,然後達妹就發現!有很多會大數據的技術人員們,用大數據來分析吃雞的數據,得到一份最強吃雞攻略! 下麵就來看看怎麼利用大 ...
  • 隨著國家大數據戰略的實施和人工智慧、雲服務、物聯網等產業的高速發展,大數據成為了2018年最為熱門的職業之一,也成為了人們茶前飯後討論的熱點!經過2018年大數據一個爆炸式的發展,隨後幾年大數據學習潮流已成必然,“超高薪、高大上、前景光明”成為大數據行業的代名詞。 雖然大數據是一個炙手可熱的行業,但 ...
  • 官網網址參考: https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_stats.htm#CIHBIEII https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_ ...
  • Preface I've installed MasterHA yesterday,Now let's test the master-slave switch and failover feature. Framework Hostname IP Port Identity OS Version ...
  • 前言 學習Android相關知識,數據存儲是其中的重點之一,如果不瞭解數據,那麼讓你跟一款沒有數據的應用玩,你能玩多久呢?答案是這和沒有手機幾乎是差不多的。我們聊QQ,聊微信,看新聞,刷朋友圈等都是看裡面的數據,所以在Android中數據對我們是多麼重要。 數據,如今是數據大時代,誰擁有數據,誰就能 ...
  • 一、EditText介紹 ①EditText是一個輸入框,在Android開發中是常用的控制項。也是獲取用戶數據的一種方式。 ②EditText是TextView的子類,它繼承了TextView的所有屬性。 二、常用屬性 1 輸入類型:android:inputType="value" value列表 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...