安卓 圆角矩形的实现

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
* Created by ibm on 2016/3/7.
*/
public class FilletImageView extends ImageView {
   
 public FilletImageView(Context context) {
       
 super (context);
       
 // TODO Auto-generated constructor stub
   
 }

   
 public FilletImageView(Context context, AttributeSet attrs) {
       
 super (context, attrs, 0);
    }

   
 protected void onDraw(Canvas canvas) {
       
 // TODO Auto-generated method stub

       
 Path clipPath = new Path();
       
 int w = this.getWidth();
       
 int h = this.getHeight();
        clipPath.addRoundRect(
new RectF(0, 0, w, h), 30.0f, 30.0f, Path.Direction. CW);
        canvas.clipPath(clipPath);
       
 super .onDraw(canvas);
    }
   
 public void setImageDrawable(Drawable drawable, int pixels) {
       
 // TODO Auto-generated method stub
       
 Bitmap bitmap = toRoundCorner(drawableToBitmap (drawable), pixels);
        Drawable drawable1 =
 new BitmapDrawable(bitmap);
       
 super .setImageDrawable(drawable1);
    }


   
 public void setImageBitmap(Drawable drawable, int pixels) {
       
 // TODO Auto-generated method stub
       
 super.setImageBitmap(toRoundCorner(drawableToBitmap(drawable), pixels));
    }

   
 public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
       
 //创建一个和原始图片一样大小位图
       
 Bitmap output = Bitmap. createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Bitmap.Config.
 ARGB_8888);
       
 //创建带有位图bitmap的画布
       
 Canvas canvas = new Canvas(output);

       
 final int color = 0xff424242 ;
       
 //创建画笔
       
 final Paint paint = new Paint();
       
 //创建一个和原始图片一样大小的矩形
       
 final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
       
 final RectF rectF = new RectF(rect);
       
 final float roundPx = pixels;
       
 // 去锯齿
       
 paint.setAntiAlias( true);
        canvas.drawARGB(
0 , 0 , 0 , 0 );
        paint.setColor(color);
       
 //画一个和原始图片一样大小的圆角矩形
       
 canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
       
 //设置相交模式
       
 paint.setXfermode( new PorterDuffXfermode(PorterDuff.Mode. SRC_IN));
       
 //把图片画到矩形去
       
 canvas.drawBitmap(bitmap, rect, rect, paint);
       
 return output;
    }


   
 public static Bitmap drawableToBitmap(Drawable drawable){

       
 int width = drawable.getIntrinsicWidth();
       
 int height = drawable.getIntrinsicHeight();
       
 //创建一个和原始图片一样大小位图
       
 Bitmap bitmap = Bitmap. createBitmap(width, height,
                drawable.getOpacity() != PixelFormat.
 OPAQUE ? Bitmap.Config.ARGB_8888
                       
 : Bitmap.Config.RGB_565); //创建一个指定高、宽的可变的Bitmap图像
        //创建带有位图bitmap的画布
       
 Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(
0 ,0 ,width,height);
        drawable.draw(canvas);
       
 return bitmap;
    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值