Android下图片变圆角的代码封装

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <!-- <com.lian.image.SetImage
        android:id="@+id/show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" /> -->
 
    <ListView
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginLeft="50dp"
        android:cacheColorHint="#000"
        android:divider="#000"
        android:dividerHeight="5px"
        android:fadingEdge="none"
        android:scrollbars="none"
        android:scrollingCache="true" />
 
</LinearLayout>
 
package com.lian.image;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff.Mode;
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;
 
public class SetImage extends ImageView {
 
     
    public SetImage(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
 
    public SetImage(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), 10.0f, 10.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(), 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(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;
         }
          
 
}
 
package com.lian.image;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
public class SetDrawable extends Activity {
     private ArrayList<HashMap<String,Object>> data;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /* Drawable drawable1 = getResources().getDrawable(R.drawable.benchi1);
                   SetImage imageView1 = (SetImage) findViewById(R.id.show);
                   imageView1.setImageDrawable(drawable1, 20);
                   imageView1.setImageBitmap(drawable1, 20);*/
        data = getData();                                          
        ListView list = (ListView)findViewById(R.id.listview);
        MyAdapter adapter = new MyAdapter(SetDrawable.this, data, R.layout.list); 
        list.setAdapter(adapter); 
    }
    private ArrayList<HashMap<String,Object>> getData(){        
         ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
            HashMap<String,Object> map = new HashMap<String,Object>();
               for(int i = 0 ; i<100 ; i++){
                   map.put("show",R.drawable.benchi1);               
                   list.add(map);              
               }   
            return list;
     }
    class ViewHolder{
        public SetImage image;      
    }
class MyAdapter extends BaseAdapter{
        //定义一个LayoutInflater来导入资料文件
        LayoutInflater inflater;
        //用来接管要绑定的数据
         ArrayList<HashMap<String,Object>> arrayList;
        //要绑定的资料文件id
         int resID;                                  
        public MyAdapter(Context context,
                ArrayList<HashMap<String, Object>> arrayList, int resID) {
            this.inflater = LayoutInflater.from(context);
            this.arrayList = arrayList;
            this.resID = resID;
        }
        //绑定的数据的长度,也就是ListView项的个数
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return  this.arrayList.size();
        }
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            //创建一个ViewHolder来盛放控件
            ViewHolder vHolder;
            //经由过程断定convertView是否为空来取得ViewHolder对象
            //这个convertView就是ListView的一行
            if (convertView == null) {
                //若是为null则从布局文件中导入
                convertView=inflater.inflate(resID, null);
                vHolder=new ViewHolder();
                vHolder.image = (SetImage)convertView.findViewById(R.id.show);                                              
                //setTag办法用来设置与视图接洽关系的标签,我的懂得就是把和它相干的ViewHolder存储起来,到用的时候再拿出来
                convertView.setTag(vHolder);
            }
            else{
                //若是不为null就直接经由过程getTag取出来
                vHolder = (ViewHolder)convertView.getTag();
            }
            //然后给ViewHolder对象的每一项赋值  s
                Drawable drawable1 = getResources().getDrawable(R.drawable.benchi1);
                vHolder.image.setImageBitmap(drawable1, 20);          
            return convertView;
        }
   }
}