
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中屏蔽/裁剪矩形所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)