11package com.fmt.github.user.activity
22
33import android.app.Activity
4+ import android.content.Intent
5+ import android.graphics.Bitmap
6+ import android.graphics.drawable.Drawable
7+ import android.net.Uri
8+ import android.os.Build
49import android.os.Bundle
10+ import androidx.core.content.FileProvider
11+ import com.bumptech.glide.Glide
12+ import com.bumptech.glide.request.target.CustomTarget
13+ import com.bumptech.glide.request.transition.Transition
514import com.fmt.github.R
615import com.fmt.github.base.activity.BaseDataBindActivity
716import com.fmt.github.databinding.ActivityPhotoPreviewBinding
817import com.fmt.github.ext.startActivity
18+ import com.fmt.github.utils.FileUtils
19+ import com.lxj.xpopup.XPopup
920import kotlinx.android.synthetic.main.activity_photo_preview.*
21+ import java.io.File
22+ import java.io.FileOutputStream
1023
1124class PhotoPreviewActivity : BaseDataBindActivity <ActivityPhotoPreviewBinding >() {
1225
26+ lateinit var mImageUrl: String
27+
1328 companion object {
1429 private const val IMAGE_URL = " image_url"
1530
@@ -24,9 +39,81 @@ class PhotoPreviewActivity : BaseDataBindActivity<ActivityPhotoPreviewBinding>()
2439 override fun getLayoutId (): Int = R .layout.activity_photo_preview
2540
2641 override fun initView () {
27- mDataBind.url = intent.getStringExtra(IMAGE_URL )
42+ mImageUrl = intent.getStringExtra(IMAGE_URL )
43+ mDataBind.url = mImageUrl
44+ mPhotoView.setOnLongClickListener {
45+ showBottomDialog()
46+ false
47+ }
2848 mPhotoView.setOnClickListener {
2949 finish()
3050 }
3151 }
52+
53+ private fun showBottomDialog () {
54+ XPopup .Builder (this )
55+ .asBottomList(
56+ getString(R .string.options), arrayOf(
57+ getString(R .string.share_picture),
58+ getString(R .string.save_picture)
59+ )
60+ ) { position, _ ->
61+ run {
62+ when (position) {
63+ 0 -> {
64+ share()
65+ }
66+ 1 -> {
67+ savePic {
68+ FileUtils .saveFile(it)
69+ }
70+ }
71+ }
72+ }
73+
74+ }.show()
75+ }
76+
77+ private fun savePic (handle : (Bitmap ) -> Unit ) {
78+ Glide .with (this @PhotoPreviewActivity).asBitmap().load(mImageUrl)
79+ .into(object : CustomTarget <Bitmap >() {
80+ override fun onResourceReady (
81+ resource : Bitmap ,
82+ transition : Transition <in Bitmap >?
83+ ) {
84+ handle(resource)
85+ }
86+
87+ override fun onLoadCleared (placeholder : Drawable ? ) {
88+ }
89+ })
90+ }
91+
92+ private fun share () {
93+ val file = File (getExternalFilesDir(" img_download" ), " ${IMAGE_URL } .jpg" )
94+ if (! file.exists()) {
95+ savePic { bitmap ->
96+ FileOutputStream (file).use { os ->
97+ bitmap.compress(Bitmap .CompressFormat .JPEG , 90 , os)
98+ }
99+ sharePic(file)
100+ }
101+ } else {
102+ sharePic(file)
103+ }
104+ }
105+
106+ private fun sharePic (file : File ) {
107+ val picUri: Uri = if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .N ) {
108+ FileProvider .getUriForFile(this , " ${packageName} .provider" , file)
109+ } else {
110+ Uri .fromFile(file)
111+ }
112+ var shareIntent = Intent ()
113+ shareIntent.action = Intent .ACTION_SEND // 设置分享行为
114+ shareIntent.type = " image/*" // 设置分享内容的类型
115+ shareIntent.putExtra(Intent .EXTRA_STREAM , picUri)
116+ shareIntent = Intent .createChooser(shareIntent, " " )
117+ startActivity(shareIntent)
118+ }
32119}
0 commit comments