18034727885
2026-04-27 3a4c1bbb2cf4fb1cdda8a5061b0674f30e7456b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.example.smart.ui.icondraw
 
import android.app.Activity
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide
import com.example.basecore.util.ImageUtils
import com.example.basecore.util.showCenterToast
import com.example.smart.R
import com.example.smart.bean.ImageRef
import com.example.smart.image.ImageProvider
import com.example.smart.bean.ImageDrawData
import ja.burhanrashid52.photoeditor.PhotoEditor
import ja.burhanrashid52.photoeditor.PhotoEditorView
import ja.burhanrashid52.photoeditor.shape.ShapeBuilder
import ja.burhanrashid52.photoeditor.shape.ShapeType
import java.io.File
 
class PhotoEditorActivity : AppCompatActivity() {
 
    private lateinit var photoEditor: PhotoEditor
    private lateinit var photoEditorView: PhotoEditorView
    private lateinit var saveButton: Button
    private lateinit var mImageProvider: ImageProvider
    private lateinit var path: String
    private lateinit var id: String
 
    private inner class ImageCallBack : ImageProvider.IImageCallback {
        override fun onUploadSuccess(entityRef: List<ImageRef>) {
//            entityRef.forEach {
//                //此处path 被使用为id
//                ImageDrawData.onDataChange(ImageDrawData(it.id, id, it.name))
//                finish()
//            }
        }
 
        override fun onUploadFailed() {
            showCenterToast("图片上传失败,请稍后再试...")
        }
    }
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_photo_editor)
 
        photoEditorView = findViewById(R.id.photoEditorView)
        saveButton = findViewById(R.id.btnSave)
 
        photoEditorView.source.setImageResource(R.drawable.shape_exclude_bg)
 
        photoEditor = PhotoEditor.Builder(this, photoEditorView)
            .setPinchTextScalable(true)
            .build()
 
        photoEditor.setBrushDrawingMode(true)
 
        mImageProvider = ImageProvider(this as Activity, ImageCallBack())
 
        path = intent.getStringExtra("path") ?: ""
        id = intent.getStringExtra("id") ?: ""
 
        val imageView: ImageView = findViewById(R.id.imageView)
        // 从网络加载图片
        Glide.with(this)
            .load(Uri.parse(path))
            .into(imageView)
 
        findViewById<Button>(R.id.btnBrush).setOnClickListener {
            photoEditor.setBrushDrawingMode(true)
        }
 
        findViewById<Button>(R.id.btnEraser).setOnClickListener {
            photoEditor.brushEraser()
        }
 
        findViewById<Button>(R.id.btnText).setOnClickListener {
//            photoEditor.addText("Sample Text", 0xFF000000.toInt())
            // add shape
            val shapeBuilder = ShapeBuilder()
                .withShapeOpacity(100)
                .withShapeType(ShapeType.Oval)
                .withShapeSize(50f)
 
            photoEditor.setShape(shapeBuilder)
        }
 
        saveButton.setOnClickListener {
            saveImage()
        }
    }
 
    private fun saveImage() {
        val file = File(externalCacheDir, "edited_image.png")
        photoEditor.saveAsFile(file.absolutePath, object : PhotoEditor.OnSaveListener {
            override fun onSuccess(imagePath: String) {
                val uri = ImageUtils.getUriByView(this@PhotoEditorActivity, photoEditorView)
                uri?.let {
                    if (::mImageProvider.isInitialized) {
                        mImageProvider.uploadPicAfterDraw(it)
                    }
                }
            }
 
            override fun onFailure(exception: Exception) {
                showCenterToast("图片保存失败,请稍后再试...")
            }
        })
    }
}