1
1
更新日期:2018年11月27日我已经解决了这个问题,在临时画布上用所需的遮罩绘制图片,然后在主画布上绘制结果位图。源代码和可视结果包含在以下内容中: maskTransformation.kt. 导入android.content.context 导入android.graphics.* 导入android.graphics.drawable.bitmapdrawable 导入android.support.annotation.drawableres 导入android.support.v4.content.contextcompat 导入com.squreup.picasso.transformation 类掩码转换( 私有VAL上下文:上下文, @drawableres private val maskid:int ):转换{ override fun key():字符串{ 返回“面具” } 覆盖fun转换(源:位图):位图{ VAL宽度=震源宽度 VAL高度=震源高度 val边框宽度=400 val output=bitmap.createBitmap(宽度、高度、bitmap.config.argb_8888) val canvas=画布(输出) //绘制一个全尺寸的红色圆环 val paint=油漆()) paint.xfermode=porterdufxfermode(porterduff.mode.src_-in) paint.color=颜色。红色 val mask=contextcompat.getdrawable(context,maskid)!! mask.setbounds(0,0,宽度,高度) 遮罩.绘图(画布) 帆布.绘画(绘画) //在顶部绘制一个蒙版、缩小的照片位图 val maskingpaint=paint()。 maskingpaint.xfermode=porterdufxfermode(porterduff.mode.src_-in) val maskdrawable=contextcompat.getdrawable(context,maskid)!! maskdrawable.setbounds(borderwidth/2,borderwidth/2,width-borderwidth/2,height-borderwidth/2) val overlayBitmap=bitmap.createBitmap(宽度、高度、bitmap.config.argb_8888) val overlayCanvas=画布(overlayBitmap) maskdrawable.draw(覆盖画布) val pictureBitmap=bitmap.createBitmap(width-borderwidth,height-borderwidth,bitmap.config.argb_8888) val PictureCanvas=画布(PictureBitmap) val sourcedrawable=bitmapdrawable(context.resources,source) sourcedrawable.setbounds(borderwidth/2,borderwidth/2,width-borderwidth/2,height-borderwidth/2) PictureCanvas.DrawBitmap( 源Drawable.bitmap, 无效的, rect(0,0,width-borderwidth,height-borderwidth) 油漆() ) overlayCanvas.drawBitmap(pictureBitmap,(borderwidth/2).tofloat(),(borderwidth/2).tofloat(),maskingpaint) canvas.drawBitmap(overlayBitmap,0f,0f,paint()) 源.recycle()) 返回输出 } } < /代码>mainactivity.kt 导入android.os.bundle 导入android.support.v7.app.appcompatactivity 导入com.squreup.picasso.picasso 导入kotlinx.android.synthetic.main.activity_main.* 类MainActivity:AppCompatActivity()。{ 覆盖fun oncreate(savedinstancestate:bundle?){ super.oncreate(保存的状态) setContentView(r.layout.activity_-main) Picasso . GET() .负荷(R.Drawable.img_氨基造影术) .transform(masktransformation(this,r.drawable.ic_squircle))。 .into(图像视图) } } < /代码>ic squircle.xml 矢量xmlns:android=“http://schemas.android.com/apk/res/android” 安卓:width=“24dp” 安卓:height=“24dp” android:viewportwidth=“32” android:viewportheight=“32”> <路径android:fillColor=“000000” android:pathdata=“M31.2,14.3v3.5c0,9.8,-5.9,13.5,-13.4,13.5h-3.5c-7.7,0,-13.5,-3.4,-13.5,-13.5v-3.5c0,-10.8,6,-13.5,13.5,-13.5h3.5c25.2,0.8,31.2,4.1,31.2,14.3”/>gt; &向量/gt; < /代码>
视觉效果主画布。源代码和可视结果如下:
蒙面变换.kt
主要活动
XML
. 视觉效果
|
Rahul Kalita · 单击一次后,图像开始从起始位置旋转 7 年前 |
TheQ · 如何将图像从Gallery上传到图像视图? 8 年前 |
Twitter khuong291 · 更改按钮内的可拉伸尺寸 9 年前 |
Abhishek V · 检查设备是否支持webP图像格式 9 年前 |
Signcodeindie · Android:如何将文本写入图像中的特定区域 10 年前 |
WSBT · 图像资源及其在屏幕上的结果大小之间的关系 11 年前 |