91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Android中加載長圖

發布時間:2021-04-27 15:53:08 來源:億速云 閱讀:247 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在Android中加載長圖,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Android是什么

Android是一種基于Linux內核的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。

方案1:WebView加載渲染

因為圖片本身也是一個URL地址,也是被WebView渲染,并且支持縮放。這是一種實現方案,遇到幾M的大圖WebView也是會崩潰Crash,所以這種投機的方式并不推薦。

方案2:BitmapRegionDecoder

分片加載,使用系統BitmapRegionDecoder去加載本地的圖片,調用bitmapRegionDecoder.decodeRegion解析圖片的矩形區域,返回bitmap,最終顯示在ImageView上。這種方案需要手動處理滑動、縮放手勢,網絡圖片還要處理緩存策略等問題。實現方式比較繁瑣也不是很推薦。

方案3:SubsamplingScaleImageView

一款封裝BitmapRegionDecoder的三方庫,已經處理了滑動,縮放手勢。我們可以考慮選擇這個庫來進行加載長圖,但是官方上的Demo示例加載的長圖均為本地圖片。這可能并不符合我們的網絡場景需求,所以對于網絡圖片,我們還要考慮不同的加載框架,

SubsamplingScaleImageView Git傳送門

方案4:Glide+SubsamplingScaleImageView混合加載渲染

對于圖片加載框架,Glide當然是首選,我們使用Glide進行網絡圖片的下載和緩存管理,FileTarget作為橋梁,SubsamplingScaleImageView進行本地資源圖片的分片加載,看起來很靠譜,那么一起來實現吧。

Glide Git傳送門

SubsamplingScaleImageView Git傳送門

fun loadLargeImage(context: Context, res: String, imageView: SubsamplingScaleImageView) {
            imageView.isQuickScaleEnabled = true
            imageView.maxScale = 15F
            imageView.isZoomEnabled = true
            imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM)
           
            Glide.with(context).load(res).downloadOnly(object : SimpleTarget<File?>() {
                override fun onResourceReady(resource: File, glideAnimation: Transition<in File?>?) {
                    val sWidth = BitmapFactory.decodeFile(resource.absolutePath).width
                    val sHeight = BitmapFactory.decodeFile(resource.absolutePath).height
                    val wm = ContextCompat.getSystemService(context, WindowManager::class.java)
                    val width = wm?.defaultDisplay?.width ?: 0
                    val height = wm?.defaultDisplay?.height ?: 0
                    if (sHeight >= height
                            && sHeight / sWidth >= 3) {
                        imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
                        imageView.setImage(ImageSource.uri(Uri.fromFile(resource)), ImageViewState(0.5f, PointF(0f, 0f), 0))
                    } else {
                        imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM)
                        imageView.setImage(ImageSource.uri(Uri.fromFile(resource)))
                        imageView.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER_IMMEDIATE)
                    }
                }
                override fun onLoadFailed(errorDrawable: Drawable?) {
                    super.onLoadFailed(errorDrawable)
                }
            })

        }

上述內容就是怎么在Android中加載長圖,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麦盖提县| 万载县| 青川县| 遵义县| 秭归县| 兰西县| 陵水| 都江堰市| 奉贤区| 巍山| 建宁县| 吉木萨尔县| 古浪县| 曲阜市| 四子王旗| 八宿县| 西宁市| 河曲县| 光山县| 屯昌县| 肃宁县| 尼勒克县| 米林县| 皋兰县| 科尔| 天柱县| 千阳县| 日照市| 奉贤区| 靖远县| 雷山县| 连城县| 佛教| 武威市| 当涂县| 灵寿县| 宜城市| 盐池县| 开封市| 荥经县| 陵水|