您的位置:首页 > 移动开发 > Android开发

关于 android ImageView 圆角处理 圆图

2016-01-03 11:10 447 查看


关于 android ImageView 圆角处理 圆图

博客分类: 

android 

相关组件找到了4个

其一:http://stackoverflow.com/questions/16208365/create-circular-image-view-in-android

Java代码  


package cn.com.idress.view;  

  

import android.content.Context;  

import android.graphics.Bitmap;  

import android.graphics.Bitmap.Config;  

import android.graphics.Canvas;  

import android.graphics.Color;  

import android.graphics.Paint;  

import android.graphics.PixelFormat;  

import android.graphics.PorterDuff.Mode;  

import android.graphics.PorterDuffXfermode;  

import android.graphics.Rect;  

import android.graphics.drawable.BitmapDrawable;  

import android.graphics.drawable.Drawable;  

import android.util.AttributeSet;  

import android.widget.ImageView;  

  

import com.lidroid.xutils.bitmap.core.AsyncDrawable;  

  

public class RoundedImageView1 extends ImageView {  

  

public RoundedImageView1(Context context) {  

    super(context);  

    // TODO Auto-generated constructor stub  

}  

  

public RoundedImageView1(Context context, AttributeSet attrs) {  

    super(context, attrs);  

}  

  

public RoundedImageView1(Context context, AttributeSet attrs, int defStyle) {  

    super(context, attrs, defStyle);  

}  

  

@Override  

protected void onDraw(Canvas canvas) {  

  

    Drawable drawable = getDrawable();  

  

    if (drawable == null) {  

        return;  

    }  

  

    if (getWidth() == 0 || getHeight() == 0) {  

        return;   

    }  

    Bitmap b = null;  

    if(drawable instanceof BitmapDrawable){  

        b =  ((BitmapDrawable)drawable).getBitmap() ;  

    }else if(drawable instanceof AsyncDrawable){  

        b = Bitmap   

                .createBitmap(   

                getWidth(),   

                getHeight(),   

                drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888   

                : Bitmap.Config.RGB_565);   

                Canvas canvas1 = new Canvas(b);   

                // canvas.setBitmap(bitmap);   

                drawable.setBounds(0, 0, getWidth(),   

                getHeight());   

                drawable.draw(canvas1);   

    }  

    Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);  

  

    int w = getWidth(), h = getHeight();  

  

  

    Bitmap roundBitmap =  getCroppedBitmap(bitmap, w);  

    canvas.drawBitmap(roundBitmap, 0,0, null);  

  

}  

  

public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {  

    Bitmap sbmp;  

    if(bmp.getWidth() != radius || bmp.getHeight() != radius)  

        sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);  

    else  

        sbmp = bmp;  

    Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),  

            sbmp.getHeight(), Config.ARGB_8888);  

    Canvas canvas = new Canvas(output);  

  

    final int color = 0xffa19774;  

    final Paint paint = new Paint();  

    final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());  

  

    paint.setAntiAlias(true);  

    paint.setFilterBitmap(true);  

    paint.setDither(true);  

    canvas.drawARGB(0, 0, 0, 0);  

    paint.setColor(Color.parseColor("#BAB399"));  

    canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,  

            sbmp.getWidth() / 2+0.1f, paint);  

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  

    canvas.drawBitmap(sbmp, rect, rect, paint);  

  

  

            return output;  

}  

  

}  

 

    else if(drawable instanceof AsyncDrawable){

              xxxxxxxxxxxxxxxxxx

    }

   加此处代码为解决xutils加载图片

 

   其二:https://github.com/vinc3m1/RoundedImageView

 此组件 用于圆角。圆图,但不支持xutils显示

 

   其三:https://github.com/lopspower/CircularImageView

   这个同样不支持xutils

   在 onDraw 方法中 加入判断即可

    else if(this.getDrawable() instanceof AsyncDrawable){

Drawable drawable = this.getDrawable();

image = Bitmap 

   .createBitmap( 

       getWidth(), 

       getHeight(), 

       drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 

       : Bitmap.Config.RGB_565); 

       Canvas canvas1 = new Canvas(image); 

       // canvas.setBitmap(bitmap); 

       drawable.setBounds(0, 0, getWidth(), 

       getHeight()); 

       drawable.draw(canvas1); 

}

 

         其四:https://github.com/hdodenhof/CircleImageView

   这个也不错。同样不支持xutils,判断尚不知道如何加

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android