android imageview加载长图Glide+Subsa

2020-09-29  本文已影响0人  hao_developer
image.png
158763676174928364815980349689.jpg

长图图片地址:
https://yd-imgs.380star.com/upload/uploadfile/2020/4/23/158763676174928364815980349689.jpg

使用第三方加载图片插件:

implementation 'com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0'
implementation 'com.github.bumptech.glide:glide:4.11.0'

第三方imageview的github地址:
https://github.com/davemorrissey/subsampling-scale-image-view

布局:

<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
            android:id="@+id/imageview"
            android:layout_width="match_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true" />

加载使用方法

package com.dsy.test

import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.PointF
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Bundle
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.davemorrissey.labs.subscaleview.ImageSource
import com.davemorrissey.labs.subscaleview.ImageViewState
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import kotlinx.android.synthetic.main.activity_two_image_view.*
import java.io.File

/** 
 *@Created by wrs on 2020/8/13,9:34
 *@packageName: com.dsy.test
 *@Description: 测试
 */
class ThreeActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_two_image_view)

        val url = "https://yd-imgs.380star.com/upload/uploadfile/2020/4/23/158763676174928364815980349689.jpg";

        loadLargeImage(this,url,imageview)

    }

  //加载图片的方法
   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)
            }
        })
   }


}
上一篇下一篇

猜你喜欢

热点阅读