Advertisement

Android GradientDrawable 转 Bitmap

阅读量:

需求:近期版本引入了多个渐变色作为背景选项。考虑到图片文件较大可能导致应用体积增大问题,在开发过程中采用drawable资源文件来加载图片。随后将开发的代码转换为Bitmap格式,并将其设置为应用的 backgrounds。

实现:
1、drawable文件(色值随意定的,只是demo):

复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
    	<!--实现应用背景颜色渐变-->
    	<gradient
        android:startColor="@color/colorAccent"
        android:endColor="@color/colorPrimaryDark"
        android:angle="270"/>
    </shape>
    
    
    java

2、代码中转Bitmap

复制代码
    private Bitmap getBitmapGradient(){
    		Drawable drawable = mContext.getResources().getDrawable(R.drawable.background_gradient);
        GradientDrawable gradientDrawable = (GradientDrawable) drawable;
        //我这图片宽高是全局变量mWidth,mHeight
        bitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        gradientDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        gradientDrawable.draw(canvas);
        return bitmap;
    }		
    
    
    java
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/gM3vr5Lx8SbaAlXz2OkyfhoWEUwn.png)

参考材料:
Converting GradientDrawable to Bitmap

参考代码:

复制代码
    public static Bitmap drawableToBitmap(Context mContext, int drawableInt) {
    Bitmap bitmap;
    
    Drawable drawable = getDrawable(mContext, drawableInt);
    
    if (drawable instanceof BitmapDrawable) {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
        if(bitmapDrawable.getBitmap() != null) {
            return bitmapDrawable.getBitmap();
        }
    } else if (drawable instanceof GradientDrawable){
        GradientDrawable gradientDrawable = (GradientDrawable) drawable;
    
        bitmap = Bitmap.createBitmap(140, 140, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        gradientDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        gradientDrawable.draw(canvas);
        return bitmap;
    }
    
    if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
        bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
    } else {
        bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    }
    
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);
    return bitmap;
    }
    
    
    java
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/3Vw6G8HFBxt9iq0WguKNlLAvprRQ.png)

全部评论 (0)

还没有任何评论哟~