在学习当中,发现图片处理有个遮罩的效果,可以通过遮罩,给予一张图片裁剪成想要的效果。
这是MaskImage .class
package com.iqinbao.android.imageprocessing; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.util.AttributeSet; import android.widget.ImageView; /** * Created by admin on 2017/6/7. */ public class MaskImage extends ImageView { int mImageSource=0; int mMaskSource=0; RuntimeException mException; public MaskImage(Context context, AttributeSet attrs){ super(context, attrs); TypedArray a =getContext().obtainStyledAttributes(attrs, R.styleable.MaskImage,0,0); mImageSource=a.getResourceId(R.styleable.MaskImage_image,0); mMaskSource=a.getResourceId(R.styleable.MaskImage_mask,0); if(mImageSource==0||mMaskSource==0){ mException=new IllegalArgumentException(a.getPositionDescription()+ ": The content attribute is required and must refer to a valid image."); } if(mException!=null) throw mException; /** * 主要代码实现 */ //获取图片的资源文件 Bitmap original = BitmapFactory.decodeResource(getResources(),mImageSource); //获取遮罩层图片 Bitmap mask= BitmapFactory.decodeResource(getResources(),mMaskSource); Bitmap result = Bitmap.createBitmap(mask.getWidth(),mask.getHeight(), Bitmap.Config.ARGB_8888); //将遮罩层的图片放到画布中 Canvas mCanvas = new Canvas(result); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));//叠加重复的部分,显示下面的 mCanvas.drawBitmap(original,0,0,null); mCanvas.drawBitmap(mask, 0, 0, paint); paint.setXfermode(null); setImageBitmap(result); setScaleType(ScaleType.CENTER); a.recycle(); } } 这是ac_main.xml <com.iqinbao.android.imageprocessing.MaskImage android:layout_width="wrap_content" android:layout_height="wrap_content" maskimage:image="@mipmap/qw010010246" maskimage:mask="@mipmap/duojinull" /> 这是attrs.xml <declare-styleable name="MaskImage"> <!-- Identifier for the image that represents the Imageview's content. --> <attr name="image" format="reference"/> <!-- crop Imageview's content same as mask --> <attr name="mask" format="reference"/> </declare-styleable> 效果图