Android之.9图片——Drawable、BitmapDrawable、NinePatchDrawable之间转换

来源:互联网 发布:红光网络 李红光 编辑:程序博客网 时间:2024/05/06 21:16

项目中使用afinal框架加载网络图片,大家都知道在加载时设置一个默认显示的图片来占位,然而这个默认的图片如果是.9图片就无法显示了,所以需要自己转换下。这里涉及到Drawable 转 bitmap时需要区分drawable是NinePatchDrawable还是BitmapDrawable,如果是NinePatchDrawable就不能直接转为BitmapDrawable来取得Bitmap了,为了解决改问题编写下面的转换工具:

package core.util;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.PixelFormat;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.graphics.drawable.NinePatchDrawable;import core.base.XBaseApplication;/** * @Description: bitmap、drawable转换工具 * @Functions: * @Author: * @Date: 2016-02-17 */public class BitmapUtil {    public static Drawable bitmap2Drawable(int resId){        Drawable d = XBaseApplication.getApplication().getResources().getDrawable(resId);        return d;    }    /**     * bitmap to drawable     * @param bitmap     * @return     */    public static Drawable bitmap2Drawable(Bitmap bitmap){        return new BitmapDrawable(bitmap);    }    /**     * drawable to bitmap     * @param drawable     * @return     */    public static Bitmap drawable2Bitmap(Drawable drawable){        if(drawable instanceof BitmapDrawable){//转换成Bitmap            return ((BitmapDrawable)drawable).getBitmap() ;        }else if(drawable instanceof NinePatchDrawable){//.9图片转换成Bitmap            Bitmap bitmap = Bitmap.createBitmap(                    drawable.getIntrinsicWidth(),                    drawable.getIntrinsicHeight(),                    drawable.getOpacity() != PixelFormat.OPAQUE ?                            Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);            Canvas canvas = new Canvas(bitmap);            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),            drawable.getIntrinsicHeight());            drawable.draw(canvas);            return bitmap;        }else{            return null ;        }    }}

核心方法:drawable2Bitmap  

结合该方法使用afinal加载网络图片完美解决默认图的设置。


0 0
原创粉丝点击