Android studio 在Android图像上添加徽标
我正在开发一款Android应用程序,它必须一次在图像上放置框架和徽标,我面临的问题是框架来自第一个片段,徽标来自第二个片段。我正在设置imageView上位图图像的边框以及徽标 我面临的问题是,当我成功地在位图图像上添加框架时,我还尝试在位图图像上设置徽标,它会删除框架并在位图上设置徽标,反之亦然 我真正想要的是帧和标志设置在位图上的时间 在这里,Logo通过方法从第一个片段适配器到主活动Android studio 在Android图像上添加徽标,android-studio,android-fragments,android-recyclerview,layout,bitmap,Android Studio,Android Fragments,Android Recyclerview,Layout,Bitmap,我正在开发一款Android应用程序,它必须一次在图像上放置框架和徽标,我面临的问题是框架来自第一个片段,徽标来自第二个片段。我正在设置imageView上位图图像的边框以及徽标 我面临的问题是,当我成功地在位图图像上添加框架时,我还尝试在位图图像上设置徽标,它会删除框架并在位图上设置徽标,反之亦然 我真正想要的是帧和标志设置在位图上的时间 在这里,Logo通过方法从第一个片段适配器到主活动 holder.iconslogo.setOnClickListener { when
holder.iconslogo.setOnClickListener {
when (charItemlogo.itemsidlogo) {
1 -> {
var btmp= arrayList[0].iconslogo
(context as MakeStylishActivity).setLogos(btmp)
}
这里的框架是从框架片段到主要活动的
holder.iconsframe.setOnClickListener {
when (charItemFrame.itemsidframe) {
1 -> {
var btmp= arrayList[0].iconsframe
(context as MakeStylishActivity).setFrames(btmp)
}}
这是将徽标和框架设置为位图的主要活动
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_make_stylish)
val byteArray = intent.getByteArrayExtra("pictures")
bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)!!
img_bitmap1.setImageBitmap(bmp)
stringqrcontent= intent.getStringExtra("qrcontent")
bottom_nav_viewstyle.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.action_default -> {
true
}
R.id.action_colors -> {
ShowFColorFragment()
true
}
R.id.action_logos -> {
ShowLogoFragment()
true
}
R.id.action_frames -> {
FunctionAddFrames();
true
}
R.id.action_patterns -> {
true
}
else -> false
}
}
}
fun setLogos(btmp: Bitmap?) {
//img_bitmap1.setImageBitmap(btmp)
PutLogoOnQRBitmaps(btmp, bmp!!)
}
fun setFrames(btmp: Bitmap?) {
// img_bitmap1.setImageBitmap(btmp)
//addWhiteBorder(bmp!!,10)
PutFrameImages(btmp, bmp!!)
}
//Combine Frame Behind QR Code
fun PutFrameImages(frame: Bitmap?, image: Bitmap): Bitmap? {
var cs: Bitmap? = null
var rs: Bitmap? = null
rs = Bitmap.createScaledBitmap(frame!!, image.width, image.height, true)
cs = Bitmap.createBitmap(rs.width, rs.height, Bitmap.Config.RGB_565)
val comboImage = Canvas(cs)
comboImage.drawBitmap(image, 0F, 0F, null)
comboImage.drawBitmap(rs, 0F, 0F, null)
if (rs != null) {
rs.recycle()
rs = null
}
// Runtime.getRuntime().gc()
img_bitmap1.setImageBitmap(cs!!)
return cs
}
//Put Logo on QR Code
fun PutLogoOnQRBitmaps(logo: Bitmap?, qrcode: Bitmap): Bitmap? {
val combined = Bitmap.createBitmap(qrcode.width, qrcode.height, qrcode.config)
val canvas = Canvas(combined)
val canvasWidth = canvas.width
val canvasHeight = canvas.height
canvas.drawBitmap(qrcode, Matrix(), null)
val resizeLogo = Bitmap.createScaledBitmap(logo!!, canvasWidth / 5, canvasHeight / 5, true)
val centreX = (canvasWidth - resizeLogo.width) / 2
val centreY = (canvasHeight - resizeLogo.height) / 2
canvas.drawBitmap(resizeLogo, centreX.toFloat(), centreY.toFloat(), null)
img_bitmap1.setImageBitmap(combined)
return combined
}}
我在这里看到了一些不被认为是好主意的事情,但最重要的是意图的大小有一个限制(即非常小),并且不是为了传递大量数据而设计的 我会怎么做 不管您的架构过于简单(没有使用ViewModels,或者正确地分离关注点,以及这里忽略的一些其他原则……),我都不会通过intent传递图像。相反,我会将图像保存到文件系统(临时),将“路径”作为字符串传递给下一个活动,并让活动打开文件并从文件系统创建位图 这意味着您不再需要担心图像大小/意图大小过大,并且您的两个活动稍微解耦。现在,您可以在那里传递位图的任何路径,而其他活动将拾取它,无论它来自何处 第二个改进是将所有这些(图像存储、传递、检索等)委托给ViewModel+UseCase(和/或存储库),在这种情况下,您将进一步解耦代码。对于这一点,以及更多,起点将是;我建议至少尝试在您的体系结构中利用 您还需要注意,在不知从何处创建位图时,您可以通过执行正在执行的操作轻松耗尽内存;你应该