android – 如何在ImageView中屏蔽裁剪矩形

android – 如何在ImageView中屏蔽裁剪矩形,第1张

概述我创建了一个自定义 ImageView来在图像中创建一个透明矩形,以使其后面的ImageView可见.但是,我无法做到对.我已经看了很多其他的答案,这就是我想出的: public class MaskImageView extends ImageView { private Paint maskPaint; public MaskImageView(Context context 我创建了一个自定义 ImageVIEw来在图像中创建一个透明矩形,以使其后面的ImageVIEw可见.但是,我无法做到对.我已经看了很多其他的答案,这就是我想出的:

public class MaskImageVIEw extends ImageVIEw {    private Paint maskPaint;    public MaskImageVIEw(Context context) {        super(context);        init();    }    public MaskImageVIEw(Context context,AttributeSet attrs) {        super(context,attrs);        init();    }    public MaskImageVIEw(Context context,AttributeSet attrs,int defStyleAttr) {        super(context,attrs,defStyleAttr);        init();    }    @TargetAPI(Build.VERSION_CODES.LolliPOP)    public MaskImageVIEw(Context context,int defStyleAttr,int defStyleRes) {        super(context,defStyleAttr,defStyleRes);        init();    }    public voID init() {        maskPaint = new Paint();        maskPaint.setcolor(color.transparent);        maskPaint.setAntiAlias(true);        maskPaint.setStyle(Paint.Style.FILL);        maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));    }    @OverrIDe    protected voID onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawRect(100,400,900,maskPaint);    }    public voID setMaskWIDth(int wIDth) {        maskWIDth = wIDth;    }}

这是XML布局:

<?xml version="1.0" enCoding="utf-8"?><relativeLayout    xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent">    <ImageVIEw        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:background="@androID:color/holo_red_dark"        androID:scaleType="centerCrop"        androID:src="@drawable/blackwhite" />    <io.example.test.MaskImageVIEw        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:background="@androID:color/holo_red_dark"        androID:scaleType="centerCrop"        androID:src="@drawable/color" /></relativeLayout>

我在左边看到了照片,但我希望它看起来像右边的照片.请注意,正常的ImageVIEw drawable是MaskImageVIEw照片的灰度版本.

解决方法 我写了一个简单的VIEw,它扩展了ImageVIEw,它可以完成你想做的事情.要使用它,您需要做的就是给它一个Rect,它将您想要的区域定义为灰度.

这是代码:

public class MaskImageVIEw extends ImageVIEw{    private Rect mMaskRect;    public MaskImageVIEw(Context context)    {        super(context);        init();    }    public MaskImageVIEw(Context context,AttributeSet attrs)    {        super(context,int defStyleAttr)    {        super(context,defStyleAttr);        init();    }    private voID init()    {        mMaskRect = new Rect();        }    // Use this to define the area which should be masked.     public voID setRect(Rect rect)    {        mMaskRect.set(rect);    }    @OverrIDe    protected voID onDraw(Canvas canvas)    {        canvas.clipRect(mMaskRect,Region.Op.DIFFERENCE);        super.onDraw(canvas);    }}

我已经测试了它,似乎效果很好.这应该让你开始.

总结

以上是内存溢出为你收集整理的android – 如何在ImageView中屏蔽/裁剪矩形全部内容,希望文章能够帮你解决android – 如何在ImageView中屏蔽/裁剪矩形所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1125472.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存