天天看点

为固定长宽的ImageView中的Bitmap添加边框

今天实习接到一个小任务,要求给ListView中ImageView的图片添加纯色的边框,来区别内容和背景。首先想到的方法就是利用ImageView的wrap_content以及magin属性,在其外面嵌套一层布局,或者在ImageView中定义@background属性,指向一个shape布局,查了资料之后发现还有利用自定义ImageView的。

 于是打开工程动手做起来,一打开布局文件发现ImageView是固定大小的,似乎上面三种方法都行不通..。尝试将ImageView属性改为wrap_content,这样一来又要考虑到缩放,对整个工程影响可能比较大。同时ImageView的边框有些时候不需要显示(比如文件在下载,或者是一个文件夹图标),于是转而尝试直接在bitmap里面动手脚。可惜入行不久对Bitmap以及画笔不是特别了解。。故继续查阅资料,发现一篇类似的文章:                                                                              http://blog.csdn.net/SJF0115/article/details/7267056

  原文是要在图片上加入比较复杂的图片边框,修改一下就达到了我要的效果。就是利用canvas画一个比原图片大德矩形,然后再画上原图,搞定!最后别忘记加上null的判断。。
           
public class MainActivity extends Activity {
    private ImageView ImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView = (ImageView) findViewById(R.id.imageview);

        Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                R.drawable.image_bg);
        ImageView.setImageBitmap(bitmapCombine(bmp,,,Color.GREEN));

    }

    /**
     * 获得添加边框了的Bitmap
     * @param bm 原始图片Bitmap
     * @param smallW 一条边框宽度
     * @param smallH 一条边框高度
     * @param color 边框颜色值
     * @return Bitmap 添加边框了的Bitmap
     */
    private Bitmap bitmapCombine(Bitmap bm, int smallW, int smallH,int color) {
    //防止空指针异常
    if(bm==null){
            return null;
        }

        // 原图片的宽高
        final int bigW = bm.getWidth();
        final int bigH = bm.getHeight();

        // 重新定义大小
        int newW = bigW+smallW*;
        int newH = bigH+smallH*;

        // 绘原图
        Bitmap newBitmap = Bitmap.createBitmap(newW, newH, Config.ARGB_8888);
        Canvas canvas = new Canvas(newBitmap);
        Paint p = new Paint();
        p.setColor(color);
        canvas.drawRect(new Rect(, , newW, newH), p);

        // 绘边框
        canvas.drawBitmap(bm, (newW - bigW -  * smallW) /  + smallW, (newH
                - bigH -  * smallH)
                /  + smallH, null);


        canvas.save(Canvas.ALL_SAVE_FLAG);
        canvas.restore();

        return newBitmap;
    }




}
           
为固定长宽的ImageView中的Bitmap添加边框