准备工作
- github 找一个图片编辑器 地址,这个图就是对单个本地图片进行编辑,加载大图有问题,页面传递bitmap有问题
- 目前已有功能:编辑一张本地图片
- 想要效果:传入图片下载list,第一个页面要有图片切换效果,点击按钮对图片进行编辑,图片保存
优化
- 首页直接glide加载图片,viewpager左右切换,对bitmap压缩防止过大导致页面崩溃
- 点击进入编辑页的时候,对对应的图片进行下载,压缩,之后再编辑,跳转页面的时候传下载压缩后的路径,而不是传递bitmap
- 因为编辑的时候是对本地图编辑,会有图片下载,保证本地相册不会过多下载图片
代码
首页传入图片集合,进行展示,对图片编辑需要申请权限
package me.minetsh.imaging
import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import android.support.v4.view.PagerAdapter
import android.support.v4.view.ViewPager
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.view.ViewGroup
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.ToastUtils
import com.htjy.app.common_util.ext.clickWithTrigger
import com.htjy.app.common_util.util.LuBanUtils
import com.tbruyelle.rxpermissions2.RxPermissions
import kotlinx.android.synthetic.main.image_activity_img_handle.*
import kotlinx.android.synthetic.main.image_edit_ready.*
const val EDIT_IMG_REQUESTCODE = 1000
class IMGHandleActivity : AppCompatActivity() {
private lateinit var dataList: ArrayList<String>
private var type: Int = 0
private val testUrl = arrayListOf("https://animal-crossing.com/amiibo/assets/img/cards/NVL-C-MAAL-USZ-F0(0)011.png",
"https://animal-crossing.com/amiibo/assets/img/cards/NVL-C-MAAM-USZ-F0(0)012.png"
, "https://animal-crossing.com/amiibo/assets/img/cards/NVL-C-MAAA-USZ-F0(0)001.png",
"https://animal-crossing.com/amiibo/assets/img/cards/NVL-C-MAAB-USZ-F0(0)002.png",
"https://animal-crossing.com/amiibo/assets/img/cards/NVL-C-MAEC-USZ-F0(0)099.png",
"https://animal-crossing.com/amiibo/assets/img/cards/NVL-C-MACD-USZ-F0(0)052.png",
"https://animal-crossing.com/amiibo/assets/img/cards/NVL_C_MAGY_USZlow_167_R_ad.png",
"https://animal-crossing.com/amiibo/assets/img/cards/NVL_C_MAHB_USZlow_170_R_ad.png",
"https://animal-crossing.com/amiibo/assets/img/cards/NVL_C_MALZ_USZlow_264_R_ad.png")
private var test = arrayListOf(
"/storage/emulated/0/DCIM/Screenshots/Screenshot_2019-10-30-10-09-35-727_com.htjy.gardener.component_remark_teacher.png", "/storage/emulated/0/BesttimerCamera2/picture_1574761262840.jpg")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.image_activity_img_handle)
initData()
}
override fun onDestroy() {
super.onDestroy()
}
companion object {
fun launch(from: Activity, data: ArrayList<String>, type: Int) {
val intent = Intent(from, IMGHandleActivity::class.java)
intent.putExtra("type", type)
intent.putStringArrayListExtra("data", data)
from.startActivityForResult(intent, EDIT_IMG_REQUESTCODE)
}
}
private fun initData() {
dataList = intent.getStringArrayListExtra("data")
type = intent.getIntExtra("type", 0)
RxPermissions(IMGHandleActivity@ this)
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
.subscribe {
if (it) {
initView()
} else {
finish()
}
}
}
private var currentPage = 0
private val fragmentList = arrayListOf<ItemFragment>()
private fun initView() {
for (value in dataList) {
fragmentList.add(ItemFragment.launch(value))
}
val adapter = MyItemFragmentPagerAdapter(supportFragmentManager, fragmentList)
vp_images.adapter = adapter
vp_images.offscreenPageLimit = dataList.size
tv_count.text = "${
currentPage + 1}/${
dataList.size}"
vp_images.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
currentPage = position
tv_count.text = "${
currentPage + 1}/${
dataList.size}"
}
})
btn_dianping.clickWithTrigger {
when (type) {
0 -> {
LuBanUtils.loadPicFromNet(dataList[currentPage], IMGHandleActivity@ this) {
isSuccess, path ->
if (isSuccess) {
IMGEditActivity.launch(path, this@IMGHandleActivity)
}
}
}
1 -> {
LuBanUtils.loadPicFromLocal(dataList[currentPage], IMGHandleActivity@ this) {
isSuccess, path ->
if (isSuccess) {
IMGEditActivity.launch(path, this@IMGHandleActivity)
}
}
}
}
}
btn_save.clickWithTrigger {