First, create an abstract class maskedimage that inherits imageview. Let him rewrite the ondraw method. The Code is as follows:
[Java]View plaincopyprint?
- Public abstract class maskedimage extends imageview {
- Private Static final xfermode mask_xfermode;
- Private bitmap mask;
- Private paint;
-
- Static {
- Porterduff. Mode localmode = porterduff. mode. dst_in;
- Mask_xfermode = new porterduxfermode (localmode );
- }
-
- Public maskedimage (context paramcontext ){
- Super (paramcontext );
- }
-
- Public maskedimage (context paramcontext, attributeset paramattributeset ){
- Super (paramcontext, paramattributeset );
- }
-
- Public maskedimage (context paramcontext, attributeset paramattributeset, int paramint ){
- Super (paramcontext, paramattributeset, paramint );
- }
-
- Public abstract bitmap createmask ();
-
- Protected void ondraw (canvas paramcanvas ){
- Drawable localdrawable = getdrawable ();
- If (localdrawable = NULL)
- Return;
- Try {
- If (this. Paint = NULL ){
- Paint localpaint1 = new paint ();
- This. Paint = localpaint1;
- This. Paint. setfilterbitmap (false );
- Paint localpaint2 = This. paint;
- Xfermode localxfermode1 = mask_xfermode;
- @ Suppresswarnings ("UNUSED ")
- Xfermode localxfermode2 = localpaint2.setxfermode (localxfermode1 );
- }
- Float F1 = getwidth ();
- Float F2 = getheight ();
- Int I = paramcanvas. savelayer (0.0f, 0.0f, F1, F2, null, 31 );
- Int J = getwidth ();
- Int K = getheight ();
- Localdrawable. setbounds (0, 0, j, k );
- Localdrawable. Draw (paramcanvas );
- If (this. Mask = NULL) | (this. Mask. isrecycled ())){
- Bitmap localbitmap1 = createmask ();
- This. Mask = localbitmap1;
- }
- Bitmap localbitmap2 = This. mask;
- Paint localpaint3 = This. paint;
- Paramcanvas. drawbitmap (localbitmap2, 0.0f, 0.0f, localpaint3 );
- Paramcanvas. restoretocount (I );
- Return;
- } Catch (exception localexception ){
- Stringbuilder localstringbuilder = new stringbuilder ()
- . Append ("attempting to draw with recycled bitmap. View id = ");
- System. Out. println ("localstringbuilder =" + localstringbuilder );
- }
- }
- }
public abstract class MaskedImage extends ImageView {private static final Xfermode MASK_XFERMODE;private Bitmap mask;private Paint paint;static {PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN;MASK_XFERMODE = new PorterDuffXfermode(localMode);}public MaskedImage(Context paramContext) {super(paramContext);}public MaskedImage(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);}public MaskedImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {super(paramContext, paramAttributeSet, paramInt);}public abstract Bitmap createMask();protected void onDraw(Canvas paramCanvas) {Drawable localDrawable = getDrawable();if (localDrawable == null)return;try {if (this.paint == null) {Paint localPaint1 = new Paint();this.paint = localPaint1;this.paint.setFilterBitmap(false);Paint localPaint2 = this.paint;Xfermode localXfermode1 = MASK_XFERMODE;@SuppressWarnings("unused")Xfermode localXfermode2 = localPaint2.setXfermode(localXfermode1);}float f1 = getWidth();float f2 = getHeight();int i = paramCanvas.saveLayer(0.0F, 0.0F, f1, f2, null, 31);int j = getWidth();int k = getHeight();localDrawable.setBounds(0, 0, j, k);localDrawable.draw(paramCanvas);if ((this.mask == null) || (this.mask.isRecycled())) {Bitmap localBitmap1 = createMask();this.mask = localBitmap1;}Bitmap localBitmap2 = this.mask;Paint localPaint3 = this.paint;paramCanvas.drawBitmap(localBitmap2, 0.0F, 0.0F, localPaint3);paramCanvas.restoreToCount(i);return;} catch (Exception localException) {StringBuilder localStringBuilder = new StringBuilder().append("Attempting to draw with recycled bitmap. View ID = ");System.out.println("localStringBuilder=="+localStringBuilder);}}}
Create a new circularimage class that inherits the maskedimage. The Code is as follows:
[Java]View plaincopyprint?
- <Span style = "font-size: 14px"> public class circularimage extends maskedimage {
- Public circularimage (context paramcontext ){
- Super (paramcontext );
- }
-
- Public circularimage (context paramcontext, attributeset paramattributeset ){
- Super (paramcontext, paramattributeset );
- }
-
- Public circularimage (context paramcontext, attributeset paramattributeset, int paramint ){
- Super (paramcontext, paramattributeset, paramint );
- }
-
- Public bitmap createmask (){
- Int I = getwidth ();
- Int J = getheight ();
- Bitmap. config localconfig = bitmap. config. argb_8888;
- Bitmap localbitmap = bitmap. createbitmap (I, j, localconfig );
- Canvas localcanvas = new canvas (localbitmap );
- Paint localpaint = new paint (1 );
- Localpaint. setcolor (-16777216 );
- Float F1 = getwidth ();
- Float F2 = getheight ();
- Rectf localrectf = new rectf (0.0f, 0.0f, F1, F2 );
- Localcanvas. drawoval (localrectf, localpaint );
- Return localbitmap;
- }
- } </Span>
public class CircularImage extends MaskedImage {public CircularImage(Context paramContext) {super(paramContext);}public CircularImage(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);}public CircularImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {super(paramContext, paramAttributeSet, paramInt);}public Bitmap createMask() {int i = getWidth();int j = getHeight();Bitmap.Config localConfig = Bitmap.Config.ARGB_8888;Bitmap localBitmap = Bitmap.createBitmap(i, j, localConfig);Canvas localCanvas = new Canvas(localBitmap);Paint localPaint = new Paint(1);localPaint.setColor(-16777216);float f1 = getWidth();float f2 = getHeight();RectF localRectF = new RectF(0.0F, 0.0F, f1, f2);localCanvas.drawOval(localRectF, localPaint);return localBitmap;}}
Create a mainactivity with the following code:
[Java]View plaincopyprint?
- Public class mainactivity extends activity {
-
- @ Override
- Protected void oncreate (bundle savedinstancestate ){
- Super. oncreate (savedinstancestate );
- Setcontentview (R. layout. activity_main );
- Circularimage cover_user_photo = (circularimage) findviewbyid (R. Id. cover_user_photo );
- Cover_user_photo.setimageresource (R. drawable. Face );
- }
- }
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);CircularImage cover_user_photo = (CircularImage) findViewById(R.id.cover_user_photo);cover_user_photo.setImageResource(R.drawable.face);}}
The XML layout file is:
[HTML]View plaincopyprint?
- <Relativelayout xmlns: Android = "http://schemas.android.com/apk/res/android"
- Xmlns: Tools = "http://schemas.android.com/tools"
- Android: layout_width = "match_parent"
- Android: layout_height = "match_parent"
- Android: gravity = "center">
-
- <Imageview
- Android: layout_width = "82.0dip"
- Android: layout_height = "82.0dip"
- Android: layout_centerinparent = "true"
- Android: contentdescription = "@ null"
- Android: src = "@ drawable/me_head_bg"/>
-
- <Com. doublefi123.diary. widget. circularimage
- Android: Id = "@ + ID/cover_user_photo"
- Android: layout_width = "74.0dip"
- Android: layout_height = "74.0dip"
- Android: layout_centerinparent = "true"/>
-
- </Relativelayout>
(Turn) create a circular Avatar