Android绘制圆形图片(五)
16lz
2022-05-28
效果图:
第一步:新建RoundView自定义控件继承View
packagecom.rong.activity;importcom.rong.test.R;importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.graphics.Bitmap.Config;importandroid.graphics.BitmapFactory;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.PorterDuff;importandroid.graphics.PorterDuffXfermode;importandroid.util.AttributeSet;importandroid.widget.ImageView;/***利用Xfermode制作一个圆形图片**@author徐荣**/publicclassRoundViewextendsImageView{/***画笔*/privatePaintmPaint;/***原型图*/privateBitmapsrc;/***遮罩层*/privateBitmapmask;publicRoundView(Contextcontext,AttributeSetattrs){super(context,attrs);//初始化画笔mPaint=newPaint();mPaint.setAntiAlias(true);//拿到原型图src=BitmapFactory.decodeResource(getResources(),R.drawable.ml);}@OverrideprotectedvoidonSizeChanged(intw,inth,intoldw,intoldh){super.onSizeChanged(w,h,oldw,oldh);//图片的遮罩,为什么要在这里面初始化遮罩层呢?因为在这个方法里Width()和Height()才被初始化了mask=Bitmap.createBitmap(getMeasuredWidth(),getMeasuredHeight(),Config.ARGB_4444);}@OverrideprotectedvoidonDraw(Canvascanvas){super.onDraw(canvas);//设置画布的颜色为透明canvas.drawColor(Color.TRANSPARENT);//划出你要显示的圆Canvascc=newCanvas(mask);cc.drawCircle(getMeasuredWidth()/2,getMeasuredHeight()/2,getMeasuredHeight()/2,mPaint);//这个方法相当于PS新建图层,下面你要做的事就在这个图层上操作canvas.saveLayer(0,0,getMeasuredWidth(),getMeasuredHeight(),null,Canvas.ALL_SAVE_FLAG);//先绘制遮罩层canvas.drawBitmap(mask,0,0,mPaint);//设置混合模式mPaint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_IN));//再绘制src源图canvas.drawBitmap(src,0,0,mPaint);//还原混合模式mPaint.setXfermode(null);//还原画布,相当于Ps的合并图层canvas.restore();}}
第二步 新建布局文件Activity_main.xml
<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:orientation="vertical"><com.rong.activity.RoundViewandroid:layout_width="160dp"android:layout_height="160dp"android:layout_centerInParent="true"/></RelativeLayout>
Run
更多相关文章
- 安卓(Android)九宫格布局介绍
- 一个Android实现图片的倒影效果的代码示例
- android之PULL解析xml文档
- Android向Http服务器发送Http请求异常-UnknowHostException
- android -------- MVP+DataBinding 的使用
- Android使用Fragment嵌套Fragment的模式实现界面滑动
- 新建android opengl工程
- android Draw Rect 坐标图示
- Watchdog 工作机制解析