天天看點

為固定長寬的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添加邊框